2012-09-24 14 views
6

Soy nuevo en nocauts y trato de poner en funcionamiento lo que debería ser una tarea simple. Estoy trabajando en una aplicación MVC4 .NET con la intención de vincular a un selector de rango de fechas para hacer solicitudes ajax para actualizar los datos del gráfico de Highchart. Estoy utilizando el selector de fecha de bootstrap de Dan Grossman y hasta ahora ha sido genial (https://github.com/dangrossman/bootstrap-daterangepicker).Usando Knockout.js para enlazar el selector de rango de fecha de inicio de bootstrap y analizar el contenido del intervalo

El objetivo básico es ver el intervalo que actualiza el selector de jQuery Data Ranger, y luego usar el knockout para pasar este valor a otra parte de la aplicación para la solicitud de AJAX.

He intentado todo lo que puedo encontrar en línea .. valueUpdate: cambio en el lapso de tiempo para usar jQuery dentro de knockout para lograr el mismo objetivo, utilizar una función de suscripción para ver el valor del span antes y después selector de fecha es usado. Aparentemente esto usa el controlador de eventos jQuery .change(), que solo es bueno en las entradas, selecciones y áreas de texto .. no abarca.

Aquí está el violín de lo que tengo hasta ahora: http://jsfiddle.net/eyygK/9/

agradecería cualquier ayuda y la entrada.

+0

@JaredFarrish No estaba seguro de si tenía que hacer un encuadernado personalizado porque solo estoy tratando de observar los cambios realizados en ese solo tramo. – jmkr

+0

No hay evento de cambio para un tramo, porque normalmente se produce una actualización de tramo desde javascript. En ese caso, debe actualizar su propiedad viewModel para actualizar el lapso, y no al revés. Los enlaces ko son normalmente para la entrada directa del usuario en la interfaz de usuario (hacer clic, escribir, enviar). – guzart

Respuesta

4

Solo necesita actualizar su propiedad currDateRange en su modelo de vista, cuando se actualice un nuevo rango de fechas.

$('#reportrange').daterangepicker({ 
    ..., 
    function (start, end) { 
     var dateRangeText = start.toString('MM/d/yy') + ' - ' + end.toString('MM/d/yy'); 
     vm.currDateRange(dateRangeText); 
    } 
}); 

Así que cuando se actualiza el intervalo de fechas, lo reportará a octavos de final, y nocaut actualizará todos los lugares donde se utiliza, el span.

Ahora puede suscribirse al currDateRange, y hacer sus llamadas Ajax desde allí.

self.currDateRange = ko.observable("09/24/12 - 09/24/12"); 
self.currDateRange.subscribe(function(newValue) { 
    $.ajax({...}); 
}); 

De esta forma, no importa de dónde provenga la actualización, el knockout se lo notificará a todos.

+0

Obtengo ['TypeError no capturado: la función Object ViewModel() {...} no tiene el método 'currDateRange''] (http://jsfiddle.net/eyygK/12/) en Chrome Console, pero sí registra la inicial apertura del selector de rango de fechas. –

+0

Asegúrese de que la instancia de ViewModel sea visible desde el selector de fechas y fechas. Me acabo de dar cuenta, pero usted nombró su instancia de modelo de vista ('vm'). Entonces en lugar de 'viewModel' (v minúscula) prueba con' vm'. – guzart

+0

http://jsfiddle.net/eyygK/13/ –

Cuestiones relacionadas