2011-10-21 15 views
5

Supponiamo di avere un ViewModel con 100 oggetti di scena. Attualmente ho bisogno di un gestore che verrà chiamato se uno dei puntelli cambia. Ovviamente posso scrivere 100 sottoscrizioni per ogni proprietà, ma sembra che ci sia un modo migliore. Come in C#, dove è possibile associare l'evento PropertyChanged del modello e quindi scegliere le proprietà di interesse in base al loro nome.knockoutjs: come ottenere notications per tutte le proprietà una volta

risposta

8

La risposta generale è creare un dipendente dipendente che si abboni a tutto. Questo può essere facilmente eseguito facendo un ko.toJS(viewModel) all'interno di un oggetto dipendente dipendente, poiché scatterà ricorsivamente tutti gli oggetti osservabili. Dovrai fare attenzione a non includerti nella chiamata ko.toJS o puoi entrare in un ciclo infinito.

Se stai cercando qualcosa con un po 'più di funzionalità, dai un'occhiata a questo post.

+0

Grazie, questo articolo ha un buon senso. Sai come posso scoprire quale particolare proprietà ha attivato la modifica? –

+0

Fare il rilevamento delle modifiche è più complicato. Ecco un esempio di come potrebbe funzionare: http://jsfiddle.net/rniemeyer/5bxLr/. La funzione "onPropertyChanged" potrebbe essere personalizzata o qualcuno potrebbe passare lì. –

1

Penso che tu stia usando KO 1.2.1. Non è così facile in questa versione. Tuttavia Knockout 1.3 sta arrivando. Attualmente è beta ma è piuttosto stabile. Throttling è stato implementato in Knockout 1.3. Penso che questo sia ciò di cui hai bisogno.

Si potrebbe leggere di più su 1,3 versione qui: http://blog.stevensanderson.com/2011/08/31/knockout-1-3-0-beta-available/

ed esaminare campioni on-line: http://jsfiddle.net/StevenSanderson/Rnmb2/1/

probabilmente potrebbe aiutare con l'attuazione nel caso in cui avete bisogno di qualche aiuto.

Spero che sia esattamente quello di cui hai bisogno.

+0

Io uso ko 1.3.0 beta, ma non vedo come il mio problema sia correlato alla limitazione. –

Problemi correlati