17

Ho cercato per un po ', e sono abbastanza sicuro che questa è una nuova domanda, e non una ripetizione come suggerisce il titolo. :)KnockoutJS bind evento dopo il rendering modello

Fondamentalmente, sto cercando di scoprire se c'è un evento subscribeable che crea KnockoutJS dopo il rendering di un modello quando si utilizza qualcosa come i modelli jQuery.

Vorrei utilizzare il "afterRender" incorporato ma ho scoperto che non si attiva se l'array osservabile viene cancellato. Ho creato questa demo per illustrare il problema: http://jsfiddle.net/farina/YWfV8/1/.

Inoltre, sono a conoscenza del fatto che potrei scrivere un gestore personalizzato ... ma ciò sembra davvero inutile per ciò di cui ho bisogno.

Voglio solo un evento che si attiva dopo che il modello ha completato il rendering.

risposta

29

La mia collega ha effettivamente risolto la scorsa notte usando qualcosa con cui stavamo giocando prima di andare a casa.

Quindi l'intero "problema" con gli eventi "afterRender", "afterAdd" e "beforeRemove" è che si comportano diversamente in combinazione con un binding "foreach". KnockoutJS è abbastanza gentile da dirti questo sul loro page, ma per qualsiasi motivo non è stato effettivamente assorbito da me finché non l'ho visto in pratica.

Che cosa funziona veramente è quello di scartare l'intero "foreach" vincolante e utilizzare "Dati" di Knockout nativi legano in questo modo:

data-bind="template: { name: 'item-template', data: items, afterRender: caller }" 

Poi "AfterRender" funziona esattamente come il nome suggerisce.

Ho avuto l'impressione che non fosse possibile ripetere la raccolta e rendere la nuova interfaccia utente senza foreach, ma questi esempi illustrano che funziona.

ho fatto un esempio per entrambi gli stili ViewModel perché a volte bisogno di uno o l'altro .

Grazie per l'aiuto Dan !!

+0

Sfortunatamente entrambe le penne sono rotte, a causa di un knockout di riferimento. Esiste anche una proprietà 'foreach' per l'associazione dei modelli ora http://knockoutjs.com/documentation/template-binding.html#note-2-using-the-foreach-option-with-a-named-template. – Olga

-1

È beforeRemove è quello che stai cercando? Non sono sicuro di quale comportamento vuoi raggiungere. Si prega di controllare questo esempio: http://jsfiddle.net/romanych/YWfV8/8/ E 'quello che vuoi o no?

+0

beforeRemove in realtà non lo copre perché si attiva prima che il modello abbia eseguito il rendering. Ho bisogno di attingere al momento esatto in cui il modello è fatto. – farina