2012-08-16 12 views
6

Realmente comenzando a disfrutar de KnockoutJs (http://knockoutjs.com). La mayoría de mis aplicaciones web son ajax. Todo el sitio está cargado y luego, de enlace a enlace, simplemente cambiamos el contenido del cuerpo a través de llamadas ajax.Enlace de Knockout.js en páginas controladas por Ajax

Cuando el ajax vuelve con un nuevo contenido corporal, puedo hacer mis enlaces Knockout. No hay problema. Cuando enlace a la página siguiente (solo una llamada ajax para reemplazar el cuerpo). Los edificios Knockout, supongo que todavía están en la memoria, pero no están realmente delimitados porque el dom ha cambiado. Algunas preguntas sobre este tema.

  1. Si la página siguiente no tiene ningún golpe de gracia en él es realmente tan malo dejar el objeto nocaut tipo de simplemente deambular en la memoria? Mejor aún, ¿hay alguna manera de reiniciar (borrar) el objeto knockout?

  2. Cuando voy de una página que tiene enlaces knockout a otra que tiene enlaces knockout, ¿simplemente volver a llamar a ko.applyBindings() borra lo viejo y vuelve a enlazar las cosas nuevas? (Una vez más cuando digo ir de una página a otra simplemente estoy recargando el cuerpo con una llamada ajax).

  3. Tiene orificios ciegos con enganches "en vivo". ¿Algo así como la vinculación en vivo de jQuery? De esta forma, Knockout podría cargarse por adelantado y luego no debería volver a aplicarse desde el cambio de contenido al cambio de contenido.

En general estoy en busca de consejo sobre cómo utilizar mejor nocaut de una página a otra en una aplicación donde el navegador no se actualiza desde una página a otra.

Gracias de antemano por la ayuda.

+2

Esta pregunta podría ayudar con el restablecimiento de enlaces: http://stackoverflow.com/questions/10048485/how-to-clear-remove-observable-bindings-in-knockout-js – peacemaker

Respuesta

1

1) Si la página siguiente no tiene ningún Knockout activado, ¿es realmente tan malo dejar el objeto knockout simplemente quedándose en la memoria? Mejor aún, ¿hay alguna manera de reiniciar (borrar) el objeto knockout?

No, no es tan malo; pero si realmente desea limpiar, puede llamar al ko.removeNode.


2) Cuando voy a una página que tiene enlaces de knockout a otro que tiene fijaciones knockout no sólo llamar ko.applyBindings (nuevo) limpiar el material antiguo y volver a enlazar el nuevo material? (Una vez más cuando digo ir de una página a otra simplemente estoy recargando el cuerpo con una llamada ajax).

Depende.

En primer lugar, como GregT mentioned:

No hay que llamar applyBindings() más de una vez en el mismo nodo (s) de DOM.

Sé por experiencia - Llamando ko.applyBindings() más de una vez en el mismo nodo DOM causará fuga de una memoria. [Si necesita hacer esto, llame al ko.cleanNode().]

otoh, si usted no está llamando ko.applyBindings() más de una vez en el mismo nodo DOM, entonces usted debe estar bien because:

KO va a hacer algo de limpieza al añadir/quitar nodos. El momento típico en que esto sucede es cuando se vuelve a renderizar una plantilla.


3) ¿El golpe de gracia tiene ningún consolidaciones "en vivo". ¿Algo así como la vinculación en vivo de jQuery? De esta forma, Knockout podría cargarse por adelantado y luego no debería volver a aplicarse desde el cambio de contenido al cambio de contenido.

No es que yo sepa, pero si entiendo su pregunta correctamente, no debería necesitar ninguna funcionalidad Knockout nativa para implementar lo que necesita. Debería poder cablearlo usted mismo con el método on() de jQuery (porque live() ha quedado en desuso).

Cuestiones relacionadas