Estoy tratando de especificar un efecto de entrada en los elementos que se insertan utilizando un enlace knockoutjs foreach. configuración muy sencilla:knockoutjs afterRender function for foreach binding
myViewModel.myObservableArray.push({enter:function() { ... });
y en el marcado:
foreach:{data:myObservableArray, afterRender:enter}
parece que debería funcionar ... ¿verdad? Pero no encuentra la función enter en el artículo. Lo que he encontrado funciona es:
myViewModel.enter = function(something, item) { item.enter(); };
foreach:{data:myObservableArray, afterRender:$root.enter}
añadiendo una función de entrar a la vista del modelo de la raíz y la unión afterRender
a $ root.enter. Intro pasa luego el elemento como su segundo parámetro, por lo que a su vez puede llamar a la función de entrada del elemento, pero se siente como un truco.
¿Alguien puede explicar lo que está pasando aquí?
Gracias.
EDIT:
Para aclarar He creado un fiddle.
Lo que esto hace es muy simple, y se trata con más profundidad en el animated transitions example. Está ejecutando una función en el modelo de vista raíz para cada elemento dom que se inserta utilizando el enlace foreach.
Entonces, la pregunta es: ¿qué ocurre si deseo que las funciones afterRender, afterAdd o beforeEmove sean específicas del artículo? Pude ver que esto era útil. Especialmente si usa el enlace de plantilla para seleccionar dinámicamente una plantilla (note 4). ¿Hay una manera limpia de hacer esto? En este momento tengo una función enter
en la raíz del modelo de vista que simplemente llama a la función enter
en el elemento, pero como dije antes, esto parece un truco.
Copiar y pegar la documentación y responder la pregunta no siempre son lo mismo. Ya había leído los documentos. Aunque sé que no siempre es el caso en este foro, entonces eliminé el voto a favor. Eso fue solo frustración hablando ... – nicholas
@nicholas Lo siento, te frustré, no estaba tratando de disuadir tu pregunta. Traté de hacer más que pegar la documentación, pero la explicación más allá de eso fue bastante simple. Parecía preguntarte por qué se comportaba de esa manera, y la respuesta es: porque fue diseñado para eso. – Tyrsius
Sí, de prisa presioné el botón de abajo antes de pensarlo. Tienes razón, por supuesto. He editado la pregunta para ser más claro. Si lo que estoy tratando de hacer (tener una función personalizada, específica del artículo, afterAdd) no es lo que hace el knockout por defecto, entonces la pregunta es: ¿cómo hago que haga lo que quiero? ¿Hay algún truco que no esté viendo? ¿O una pieza de código flotando por ahí que podría usar? Realmente no quiero perder un día reconstruyendo el enlace foreach si alguien ya ha hecho el trabajo por mí ... – nicholas