17

He estado buscando por un tiempo, y estoy bastante seguro de que esta es una pregunta nueva, y no una repetición como sugiere el título. :)KnockoutJS bind evento después de la plantilla render

Básicamente, estoy tratando de averiguar si hay un evento subscribible que KnockoutJS crea después de que una plantilla se renderiza al usar algo como plantillas de jQuery.

Utilizaría el "afterRender" incorporado pero descubrí que no se dispara si se borra la matriz observable. Creé 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.

Respuesta

29

Mi colega en realidad resolvió esta última noche usando algo con lo que estábamos jugando antes de ir a casa.

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

Lo que realmente funciona es que desechar todo el "foreach" atar y usar "datos" de Knockout nativas se unen de esta manera:

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

Entonces "afterRender" funciona exactamente como su nombre indica.

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

I hizo un ejemplo para ambos estilos ViewModel porque a veces necesito uno o el otro .

Gracias por la ayuda Dan !!

+0

Desafortunadamente, ambos rotuladores están rotos, debido a la referencia rota de rotura. También hay una propiedad 'foreach' para el enlace de plantilla ahora http://knockoutjs.com/documentation/template-binding.html#note-2-using-the-foreach-option-with-a-named-template. – Olga

-1

¿Es beforeRemove es lo que está buscando? No estoy seguro de qué comportamiento desea lograr. Por favor revise esta muestra: http://jsfiddle.net/romanych/YWfV8/8/ ¿Es lo que quiere o no?

+0

beforeRemove en realidad no lo cubre porque se dispara antes de que se haya procesado la plantilla. Necesito aprovechar el momento exacto en que se realiza la plantilla. – farina

Cuestiones relacionadas