/ / Zarządzaj zakresem javascript w aplikacji ajax za pomocą JQuery - javascript, jquery, firebug

Zarządzaj zasięgiem javascript w aplikacji ajax poprzez JQuery - javascript, jquery, firebug

Zastanawiam się, jak zarządzać zakresem skryptu w pełnej aplikacji ajax

Pozwól mi wyjaśnić scenariusz

  • Strony są ładowane dynamicznie do div,
  • strony są plikami php
  • strony zawierają znaczniki skryptów (statyczne i generowane przez php) w ​​zależności od kontekst

Załaduj scenariusz:

  1. ładowanie stron wzorcowych za pomocą funkcji jquery $ .load
  2. strona jest wstawiana i skrypt jest wykonywany (głównie zdarzenia wejściowe lub zdarzenia na żywo)

kiedy wybieram inną stronę (wyobraź sobie kombinację ze wszystkimi wymienionymi stronami), scenariusz ładowania jest uruchamiany ponownie ...

linia kodu 2 js, która ma znaczenie na stronie wzorcowej

$("#divContent").children().remove();
$("#divContent").load("*PAGES-X*");

)

Oto najważniejsze problemy, JQuery eval kod skryptu i wydaje się, że umieszcza go następnie w Eval Array (w firebug znajduje się pod adresem jquery.mins.js / eval / seq /numer tablicy) Zatem js nigdy nie jest rozładowywany z zakładki eval

Więc jeśli mam jakieś wydarzenie na żywo na moich stronach, kod jest wykonywany tyle razy, ile strony zostały załadowane ...

Potrzebuję więc sposobu na oczyszczenie tego eval ... lub zautomatyzowany sposób na usunięcie wszystkich zdarzeń z określonego zakresu (ponieważ mam powiązanie innych zdarzeń na stronie wzorcowej)

Dzięki Ci

Odpowiedzi:

1 dla odpowiedzi № 1

możliwie

$(selector).die();

przydaje się? Spowoduje to usunięcie wszystkich powiązań live () dla wybranych elementów. Widzieć http://api.jquery.com/die/ po więcej informacji!


0 dla odpowiedzi nr 2

Po załadowaniu skryptu, AFAIK nie jest w stanie go zwolnić.

Możesz użyć ramki iframe zamiast div, w ten sposób za każdym razem, gdy strona jest ładowana ponownie, zaczynasz od czystej tablicy (w ramce iframe) jeszcze raz.

Lub napisz javacsript w sposób, który nie spowoduje kolizji, jeśli wiele skryptów zostanie załadowanych jednocześnie.


0 dla odpowiedzi № 3

Możesz spróbować użyć przestrzeni nazw. Na twojej stronie głównej:

var ws = {};

W załadowanej treści:

$( ws.funnyStuff = function() {
// some realy funny stuff here
});

Po zakończeniu możesz odrzucić całą przestrzeń nazw:

ws = {};

Uwaga: wpis w firebug pozostanie, nie wiem dokładnie dlaczego, ale powiązany kod nie będzie już wykonywany.