2011-10-21 25 views
5

Supongamos que tengo un ViewModel con 100 accesorios. Actualmente necesito un solo controlador que se llamará si alguno de los accesorios cambia. Por supuesto, puedo escribir 100 .subscribe para cada propiedad, pero parece que hay una mejor manera. Al igual que en C#, donde puede enlazar al evento PropertyChanged del modelo, y luego elegir las propiedades de interés por sus nombres.knockoutjs: cómo recibir notificaciones para todas las propiedades una vez

Respuesta

8

La respuesta general es crear un dependObservable que se suscriba a todo. Esto se puede lograr fácilmente haciendo un ko.toJS(viewModel) dentro de un dependiente dependiente, ya que desenvolverá recursivamente todos los observables. Deberá tener cuidado de no incluirse en la llamada ko.toJS o puede entrar en un ciclo infinito.

Si buscas algo con un poco más de funcionalidad, échale un vistazo a este post.

+0

Gracias, este artículo tiene buen sentido. ¿Conoces la forma en que puedo encontrar qué propiedad en particular ha desencadenado el cambio? –

+0

Hacer el seguimiento de cambios es más complicado. Aquí hay una muestra de cómo podría funcionar: http://jsfiddle.net/rniemeyer/5bxLr/. La función "onPropertyChanged" podría personalizarse o alguien podría pasar allí. –

1

Creo que estás usando KO 1.2.1. No es tan fácil en esta versión. Sin embargo, viene Knockout 1.3. Actualmente es beta, pero es bastante estable. La aceleración se ha implementado en Knockout 1.3. Creo que esto es lo que necesitas.

Se puede leer más sobre la versión 1.3 aquí: http://blog.stevensanderson.com/2011/08/31/knockout-1-3-0-beta-available/

y examinar la muestra en línea: http://jsfiddle.net/StevenSanderson/Rnmb2/1/

probablemente podría ayudarle con la aplicación en caso de que necesite un poco de ayuda.

Espero que sea exactamente lo que necesita.

+0

Uso ko 1.3.0 beta, pero no veo cómo se correlaciona mi problema con la aceleración. –

Cuestiones relacionadas