2012-08-16 21 views
6

Inizia davvero a godere di KnockoutJs (http://knockoutjs.com). La maggior parte delle mie app Web è gestita ajax. L'intero sito viene caricato e quindi da link a link cambiamo semplicemente il contenuto del corpo tramite chiamate ajax.Knockout.js Binding On Ajax Driven Pages

Quando l'ajax ritorna con nuovo contenuto corporeo posso eseguire i miei attacchi Knockout. Nessun problema. Quando collego alla pagina successiva (solo una chiamata Ajax con la sostituzione del corpo). Gli edifici Knockout, suppongo, sono ancora in memoria, ma non delimitati perché la dom è cambiata. Alcune domande su questo argomento.

  1. Se la pagina successiva non ha alcun Knockout su di esso è davvero così male a lasciare il ko oggetto sorta di appena persistente in memoria? Meglio ancora c'è un modo per resettare (cancellare) l'oggetto knockout?

  2. Quando vado da una pagina che ha binding ad eliminazione diretta ad un'altra che ha binding ad eliminazione diretta, semplicemente chiama ko.applyBindings() di nuovo ripulire le vecchie cose e rebind le nuove cose? (ancora una volta quando dico di passare da una pagina all'altra, sto solo ricaricando il corpo con una chiamata ajax).

  3. Il knockout ha associazioni "dal vivo". Un po 'come il live binding di jQuery? In questo modo, Knockout potrebbe essere caricato in anticipo e quindi non dovrà essere riapplicato dalla modifica del contenuto alla modifica del contenuto.

In generale Cerco consigli su come utilizzare al meglio knockout da una pagina all'altra in un app in cui il browser non è rinfrescante da una pagina all'altra.

Grazie in anticipo per l'aiuto.

+2

Questa domanda può essere utile per quanto riguarda il ripristino dei binding: http://stackoverflow.com/questions/10048485/how-to-clear-remove-observable-bindings-in-knockout-js – peacemaker

risposta

1

1) Se la pagina successiva non ha alcun Knockout su di esso è davvero così brutto lasciare l'oggetto ad eliminazione diretta in una sorta di memoria? Meglio ancora c'è un modo per resettare (cancellare) l'oggetto knockout?

No, non è così male; ma se ti va di pulire, puoi chiamare lo ko.removeNode.


2) Quando vado da una pagina che ha binding knockout ad un altro che ha attacchi eliminazione diretta si limita a chiamare ko.applyBindings() ancora chiare la roba vecchia e associare nuovamente il nuovo materiale? (ancora una volta quando dico di passare da una pagina all'altra, sto solo ricaricando il corpo con una chiamata ajax).

Dipende.

Innanzitutto, come GregT mentioned:

Non si deve chiamare più applyBindings() di una volta sullo stesso nodo DOM (s).

So per esperienza - Calling più ko.applyBindings() di una volta sullo stesso nodo DOM causerà una perdita di memoria. [Se è necessario, chiamare ko.cleanNode().]

OTOH, se non stai chiamando più ko.applyBindings() di una volta sullo stesso nodo DOM, allora si dovrebbe andare bene because:

KO farà po 'di pulizia, quando aggiunta/rimozione di nodi. Il tempo tipico in cui ciò accade è quando si ricrea un modello.


3) Fa eliminazione diretta ha binding "live". Un po 'come il live binding di jQuery? In questo modo, Knockout potrebbe essere caricato in anticipo e quindi non dovrà essere riapplicato dalla modifica del contenuto alla modifica del contenuto.

Non che io sappia, ma se ho capito bene la tua domanda, non dovresti aver bisogno di alcuna funzionalità Knockout nativa per implementare ciò che ti serve. Dovresti essere in grado di collegarlo da solo con il metodo on() di jQuery (perché lo standard live() è stato ritirato).

Problemi correlati