2010-10-11 7 views
7

Mam skomplikowaną strukturę interfejsu użytkownika, który jest manipulowany dynamicznie i powiedzieć mam obiektu ui_state gdzie trzymać użytkownika najnowszych stany UI, takie jak, która karta była widoczna, co jest w środku tej karcie itpjak dodać obiekt eventListener do obiektu w javascript, który będzie uruchamiany podczas manipulowania obiektem?

Na przykład:

var ui_states = { 
    tabs : [ 
    { 
     name  : "some tab", 
     active : true, 
     children : { ... } 
    }, 
    { 
     name  : "some other tab", 
     children : { ... } 
    } 
    ] 
} 

Utrzymuję to na html5 localStorage, a gdy użytkownik odświeży stronę, ponownie otworzy stronę. I za każdym razem, gdy interfejs użytkownika zmienia ten obiekt, zmienia się odpowiednio. I zaraz po zmianie muszę uruchomić, powiedzmy, updateLocalStorage(), który działa idealnie.

Moje pytanie dotyczy tego przepływu, czy mogę utworzyć niestandardowe zdarzenie do mojego obiektu ui_states coś podobnego do ui_states.addEventListener('onchange', function(){ // do stuff }), aby nie uruchamiać tej funkcji updateLocalStorage() za każdym razem, gdy manipuluję obiektem?

Dzięki.

Odpowiedz

3

Mieszasz programowanie JavaScriptu z programowaniem DOM. Wydarzenia są wyłącznie koncepcją DOM. Obiekty JS nie obsługują procedur obsługi zdarzeń.

Jedynym sposobem, aby to zrobić, jest utworzenie modułów pobierających i ustawiających. Istnieją sposoby, aby to zrobić z special properties, ale niestety obsługa przeglądarki może być trochę. Innym sposobem jest użycie jawnych metod i prywatnych zmiennych. This is possible but a little complex.

+2

Nie zgadzam się. Zdarzenia absolutnie nie są wyłącznie DOM. Ale koncepcja luźnego łączenia komponentów, które mogą być implementowane również w "Dom-Less" -JS. –

+0

Tak, prawdopodobnie miesza te dwa pojęcia, ale tak, niektóre czyste obiekty javascript obsługują zdarzenia takie jak XMLHTTPRequest, RTCConnection, Worker, WebSocket ... Aby uzupełnić mój komentarz, obiekt Object nie obsługuje zdarzeń z wyjątkiem (ostatnio) z Object.observe (tylko dla Chrome jeszcze). – Jordan

+1

OK, kiedy opublikowałem tę odpowiedź, wydarzenia rzeczywiście dotyczyły tylko obiektów DOM. Od tego czasu sprawy oczywiście posunęły się naprzód. – staticsan

Powiązane problemy