2010-10-11 34 views
7

我有動態操縱複雜的UI結構,並說我有一個ui_state對象,其中我保持用戶的最新UI狀態,如哪個選項是可見的,那是什麼標籤等如何將一個eventListener添加到JavaScript中的對象,該對象將在操作對象時觸發?

例如內:

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

我保留這個在html5 localStorage和當用戶刷新站點它重新打開頁面相同。每當UI改變時,這個對象都會相應地改變。而改變它後,我需要運行,比如說​​這是完美的工作。

我的問題是對於這個流程,我可以創建一個自定義事件到我的ui_states對象類似ui_states.addEventListener('onchange', function(){ // do stuff })不會運行​​函數每次當我操縱對象?

謝謝。

回答

3

您正在將JavaScript編程與DOM編程混合在一起。事件純粹是一個DOM概念。 JS對象不支持事件處理程序。

要做到這一點的唯一方法是創建getters和setter。有些方法可以通過special properties來做到這一點,但不幸的是,瀏覽器的支持可能有點。另一種方法是使用顯式方法和私有變量。 This is possible but a little complex.

+2

我不同意。事件絕對不只是DOM。但是一個概念可以鬆散地耦合可以在「Dom-Less」-JS中實現的組件。 – 2014-10-06 17:38:51

+0

是的,他可能混合了這兩個概念,但是,有些純JavaScript對象支持像XMLHTTPRequest,RTCConnection,Worker,WebSocket等事件... 要完成我的評論,沒有Object對象不支持(最近) Object.observe(僅適用於Chrome)。 – Jordan 2014-11-18 11:54:44

+1

好的,當我發佈該答案時,事件確實只在DOM對象上。顯然,事情自那時以來一直在向前發展。 – staticsan 2014-11-25 03:33:28

相關問題