2012-08-16 17 views
6

Naprawdę zaczynamy korzystać z KnockoutJs (http://knockoutjs.com). Większość moich aplikacji internetowych jest sterowana ajaxem. Cała strona jest ładowana, a następnie z linku do łącza po prostu zmieniamy treść ciała poprzez wywołania ajaxowe.Knockout.js Wiązanie na stronach napędzanych Ajaxem

Gdy ajax wraca z nową treścią ciała, mogę wykonywać wiązania Knockout. Nie ma problemu. Kiedy łączę się z następną stroną (tylko wywołanie ajax z zastępowaniem ciała). Budynki Knockout, zakładam, że są nadal w pamięci, ale nie są naprawdę ograniczone, ponieważ dom się zmienił. Kilka pytań na ten temat.

  1. Jeśli następna strona nie posiada żadnych Knockout na to jest naprawdę tak źle opuścić nokaut obiektu rodzaj tylko przewlekły w pamięci? Czy istnieje jeszcze sposób na zresetowanie (wyczyszczenie) obiektu nokautu?

  2. Kiedy przechodzę z jednej strony, która ma wiązania typu "knockout", z powiązaniami typu "knockout", po prostu wywołanie ko.applyBindings() ponownie usuwa starą zawartość i ponownie wiąże nowe elementy? (po raz kolejny, gdy mówię, przechodząc z jednej strony na drugą, po prostu przeładowuję ciało wywołaniem ajax).

  3. Czy nokaut ma jakiekolwiek wiązania "na żywo". Coś w rodzaju powiązania na żywo jQuery? W ten sposób Knockout może zostać załadowany z góry, a następnie nie musi być ponownie stosowany od zmiany treści do zmiany treści.

Ogólnie szukam porady, jak najlepiej wykorzystać nokaut ze strony na stronę w aplikacji, w której przeglądarka nie odświeża się od strony do strony.

Z góry dziękujemy za pomoc.

+2

To pytanie może pomóc w zresetowaniu powiązań: http://stackoverflow.com/questions/10048485/how-to-clear-remove-observable-bindings-in-knockout-js – peacemaker

Odpowiedz

1

1) Jeśli na następnej stronie nie ma Knockoutu, to czy naprawdę źle jest zostawić obiekt nokautowy w pamięci? Czy istnieje jeszcze sposób na zresetowanie (wyczyszczenie) obiektu nokautu?

Nie, nie jest tak źle; ale jeśli naprawdę chcesz posprzątać, możesz zadzwonić pod numer ko.removeNode.


2) Kiedy idę z jednej strony, że ma powiązania z nokautem na inny, który ma powiązania z nokautem nie tylko wywołanie ko.applyBindings() ponownie usunięcie zawartości starych rzeczy i ponownie powiązać nowych rzeczy? (po raz kolejny, gdy mówię, przechodząc z jednej strony na drugą, po prostu przeładowuję ciało wywołaniem ajax).

To zależy.

Przede wszystkim, jak GregT mentioned:

Nie należy zadzwonić applyBindings() więcej niż raz w tym samym węźle (ów) DOM.

wiem z doświadczenia - Calling ko.applyBindings() więcej niż raz w tym samym węźle DOM spowoduje wyciek pamięci. [Jeśli musisz to zrobić, zadzwoń pod numer ko.cleanNode().]

OTOH, jeśli nie dzwonisz ko.applyBindings() więcej niż raz w tym samym węźle DOM, wtedy powinno być dobrze because:

KO zrobi jakieś porządki w trakcie dodawania/usuwania węzłów. Typowy czas, w którym to się dzieje, to ponowne renderowanie szablonu.


3) Czy nokaut mają żadnych powiązań "na żywo". Coś w rodzaju powiązania na żywo jQuery? W ten sposób Knockout może zostać załadowany z góry, a następnie nie musi być ponownie stosowany od zmiany treści do zmiany treści.

Nie wiem, ale jeśli dobrze rozumiem twoje pytanie, nie powinieneś potrzebować natywnej funkcji Knockout, aby zaimplementować to, czego potrzebujesz. Powinieneś być w stanie go podłączyć za pomocą metody jQuery's on() (ponieważ live() został wycofany).

Powiązane problemy