knockoutjs afterRender-Funktion in foreach-binding

Ich versuche, die angeben, ein Eintritt auf Elemente eingefügt werden können, mit einer knockoutjs foreach-binding. Sehr einfaches setup:

myViewModel.myObservableArray.push({enter:function() { ... });

und in der markup:

foreach:{data:myObservableArray, afterRender:enter}

scheint, wie es funktionieren sollte... richtig? Aber es nicht die enter-Funktion auf das Element. Was ich gefunden habe, die funktioniert, ist:

myViewModel.enter = function(something, item) { item.enter(); };

foreach:{data:myObservableArray, afterRender:$root.enter}

hinzufügen eine enter-Funktion auf der root-view-Modell und Bindung afterRender $root.geben Sie. Geben Sie dann übergeben Sie das Element als zweiten Parameter, so kann wiederum rufen das Element enter-Funktion, aber es fühlt sich an wie ein hack.

Kann mir jemand erklären, was hier Los ist?

Dank.

EDIT:

Zu klären, habe ich einen fiddle.

Was dieser tut, ist sehr einfach, und ist bedeckt in mehr Tiefe in der animierte übergänge Beispiel. Es läuft eine der Funktion in die Wurzel-view-Modell für jedes dom-element, das eingefügt wird mit dem foreach-binding.

Also die Frage ist: was ist, wenn ich will " item specific afterRender, afterAdd oder beforeRemove Funktionen? Ich konnte sehen, dass diese nützlich sein. Vor allem, wenn mit der Vorlage-Bindung dynamisch wählen Sie eine Vorlage (Hinweis 4). Gibt es eine saubere Art und Weise, dies zu tun? Jetzt habe ich ein enter Funktion im view-model-s-Stamm, der ruft einfach die enter Funktion auf das Element, aber wie ich oben sagte, dies fühlt sich wie ein hack.

InformationsquelleAutor nicholas | 2012-07-31

Schreibe einen Kommentar