knockout for array javascript jquery templates knockout.js knockout-templating

javascript - for - Evento de enlace KnockoutJS después del procesamiento de la plantilla



ko observable (2)

He estado buscando por un tiempo, y estoy bastante seguro de que esta es una pregunta nueva, y no una repetición como lo sugiere el título. :)

Básicamente, estoy tratando de averiguar si hay un evento de suscripción que KnockoutJS crea después de que una plantilla se renderice cuando se usan plantillas como jQuery.

Usaría el "afterRender" incorporado pero descubrí que no se dispara si se borra la matriz observable. Construí esta demostración para ilustrar ese problema: http://jsfiddle.net/farina/YWfV8/1/ .

Además, soy consciente de que podría escribir un controlador personalizado ... pero eso parece realmente innecesario para lo que necesito.

Solo quiero un evento que se active después de que la plantilla termine de renderizarse.


Es beforeRemove es lo que estás buscando? No estoy seguro de qué comportamiento quieres lograr. Por favor revisa este ejemplo: http://jsfiddle.net/romanych/YWfV8/8/ ¿Es lo que quieres o no?


Mi colega realmente resolvió esto la última noche con algo con lo que jugábamos antes de irme a casa.

Por lo tanto, todo el "problema" con los eventos "afterRender", "afterAdd" y "beforeRemove" es que actúan de manera diferente en conjunción con un enlace "foreach". KnockoutJS es lo suficientemente amable como para decirte esto en su page , pero por alguna razón no se me ocurrió hasta que lo vi en la práctica.

Lo que realmente funciona es eliminar todo el enlace "foreach" y usar el enlace "datos" nativo de Knockout de esta manera:

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

Entonces "afterRender" funciona exactamente como lo sugiere su nombre.

Tenía la impresión de que no podías iterar la colección y generar una nueva interfaz de usuario sin foreach, pero estos ejemplos ilustran que funciona.

Hice un ejemplo para ambos estilos de ViewModel porque a veces necesito uno u otro.

Gracias por la ayuda Dan !!