Sto tentando di specificare un effetto di ingresso sugli elementi che vengono inseriti utilizzando un binding foreach knockoutjs. Molto semplice configurazione:knockoutjs afterRender function in foreach binding
myViewModel.myObservableArray.push({enter:function() { ... });
e nella marcatura:
foreach:{data:myObservableArray, afterRender:enter}
sembra come dovrebbe funzionare ... giusto? Ma non trova la funzione di invio sull'elemento. Quello che ho trovato funziona è:
myViewModel.enter = function(something, item) { item.enter(); };
foreach:{data:myObservableArray, afterRender:$root.enter}
l'aggiunta di una funzione di immettere alla vista del modello principale e vincolante afterRender
a $ root.enter. Enter viene quindi passato l'elemento come secondo parametro, quindi a sua volta può chiamare la funzione di inserimento dell'oggetto, ma sembra un trucco.
Qualcuno può spiegare cosa sta succedendo qui?
Grazie.
EDIT:
Per chiarire Ho creato un fiddle.
Ciò che fa è molto semplice, ed è coperto in modo più approfondito nel animated transitions example. Sta eseguendo una funzione nel modello di visualizzazione radice per ciascun elemento dom inserito utilizzando l'associazione foreach.
Quindi la domanda è: cosa succede se desidero le funzioni afterRender, afterAdd o beforeRemove specifiche dell'oggetto? Potrei vedere questo essere utile. Soprattutto se si utilizza l'associazione del modello per selezionare dinamicamente un modello (note 4). C'è un modo pulito per farlo? In questo momento ho una funzione enter
nella radice del modello di visualizzazione che chiama semplicemente la funzione enter
sull'elemento, ma come ho detto sopra questo sembra un trucco.
copiando e incollando la documentazione e rispondendo alla domanda non sono sempre la stessa cosa. Avevo già letto i documenti. Anche se so che non è sempre il caso su questo forum, quindi ho rimosso il downvote. Quello era solo la frustrazione di parlare ... – nicholas
@nicholas Ci dispiace che ti frustrato, non stavo cercando di spazzolare la tua domanda off. Ho provato a fare di più che incollare la documentazione, ma la spiegazione al di là di questo era piuttosto semplice. Sembravi chiedere perché si comportava in quel modo, e la risposta è: perché è stato progettato per. – Tyrsius
Sì, di fretta ho premuto il pulsante giù prima che ci pensassi. Hai ragione, certo. Ho modificato la domanda per essere più chiara. Se quello che sto cercando di fare (avere una funzione personalizzata, specifica di un oggetto, afterAdd) non è quello che fa knockout di default, allora la domanda diventa: come faccio a fare ciò che voglio? C'è un trucco che non vedo? O un pezzo di codice che fluttua là fuori che potrei usare? Non voglio davvero sprecare una giornata ricostruire il legame se qualcuno ha già fatto il lavoro per me ... – nicholas