2012-02-15 64 views
0

我想知道如何將一個事件監聽器附加到一個變量......我知道這聽起來超級怪異,所以這就是我正在與之合作。javascript中的valuechange事件?

B.viewController = function() { 
    var view = 'large'; 

    var update = function() { 
    if($(window).width() >= 481) { 
     var new-view = 'large'; 
     return view == new-view 
    } else { 
     var new-view = 'mobile'; 
     return view == new-view; 
    } 
    } 

    update(); 

    $(window).resize(function() { 
    update(); 
    }); 
}; 

現在我想擴大,這樣我可以將它作爲一個事件偵聽器,例如我可以用這個做類似coolImage.bind(「B.viewController」,回調),因此如果視圖更改回調被調用,而不必將調整大小偵聽器附加到窗口...

+1

這聽起來超級怪異... = ) – gdoron 2012-02-15 21:29:57

+2

你不能在變量名中使用破折號! – ThiefMaster 2012-02-15 22:18:30

回答

0

您可能想定製事件來完成這項工作。

下面是一個例子:

var Publisher = {}, Subscriber = {}, EVENT_NAME = 'publisher.updated', 
    PubSub = $({}); 

Publisher.update = function() { 
    PubSub.trigger(EVENT_NAME); 
}; 

Subscriber.onUpdate = function() { 
    alert('Received update!'); 
}; 

PubSub.bind(EVENT_NAME, Subscriber.onUpdate); 
Publisher.update(); 

發行時觸發更新被稱爲事件,當事件觸發時用戶收聽的事件。

將此應用於您的案例,當B.viewController已更新時,您可以致電PubSub.trigger('view.updated')觸發更新事件。然後,coolImage通過PubSub.bind('view.updated', coolImage.onViewUpdated)收聽活動。

信用卡/參考

+0

有沒有這樣的事情'Javascript事件機制'。在你的代碼中,你正在使用jQuery的'trigger'和'bind'函數以及一些自定義消息。 – 2012-02-15 22:36:44

+0

@JulianD。 - 謝謝。我會更新我的帖子以反映它。 – DashK 2012-02-15 22:38:21

0

對於HTML元素上的事件:我會寫一個大的Listener類。它會有一個函數將自己綁定到一個元素。這個函數會將Listener的內部方法綁定爲所有元素事件的回調函數,如onload,onclick等。然後,您將爲不同類型的偵聽器實例化Listener,將實際函數分配給Listener的內部方法。另一種選擇是將所有這些事件綁定到一個回調函數,該回調函數將獲得一個參數 - 事件描述。如果我記得正確,IE並不總是發送該參數 - 如果這是真的,你應該看看window.event。在此功能中,您將處理完成的所有事件。如果您仍然想辨別發生了哪個事件,您可以通過持有事件詳細信息的對象的類型來實現。

對於變量的事件:我沒有遇到過這樣的事情。它不存在於大多數編程語言中,我不認爲它存在於JavaScript中。我會建議使用好的舊OOP練習 - getter和setter。因此,您將寫入a.set(x)而不是a = xa.getX()而不是a.x,在這些方法中,您可以根據需要處理更改。