我已經做了幾個小時的額外研究,但我仍然無法找到一個好的模式,我認爲這是一個常見問題。Managaing jQuery自定義事件
我正在處理.Net MVC2應用程序。我們的應用程序是由一個主網頁,然後一些局部視圖(包括頁)的部分景色每一個對應於由一個HTML結構的部件和的JS-jQuery的膽量
我們的一些窗口有相互豐富的互動所以當然我們使用jQuery的事件綁定的東西這樣的效果:
數據彙總的Widget
$(document).bind("DataUpdated", summaryobject.updateTotals());
數據操作的Widget
$(document).trigger("DataUpdated");
我們具有的問題是,當使用者瀏覽的應用程序的部分這些微件(HTML/DOM)是從網頁中移除並用新的一組局部視圖替換。當用戶瀏覽時,HTML(可視化表示)與jQuery綁定一起重新加載,創建雙重綁定。
到目前爲止,我的解決方案似乎對我跛腳。
(1)結合DOM對象的綁定是:
$("#summaryobject").bind("DataUpdated", summaryobject.updateTotals());
這樣做的問題是,然後我的觸發部件需要知道什麼DOM bject來觸發:$("#summaryobject")
哪種擊敗目的。 (2)創建一個EventBus對象來描述誰綁定了哪些事件,並且只允許綁定一次事件。我遇到的問題是,在存儲/綁定事件時,我無法跟蹤創建它的人,因此如果需要,我無法取消註冊。可能未註冊的事件不是事件必需的。
其他人使用哪些模式管理自定義事件?
所以這基本上只使用jQuery綁定來調用事件管理器?事件管理器本身是jQuery內置事件綁定的更復雜版本?我不太瞭解火法,但我想我知道它在做什麼。 – 2010-10-08 19:00:09
@Chris - 選項#2實際上完全獨立於任何JavaScript庫。它創建了一個事件的中心註冊表,並允許任何知道它的事物爲事件添加「監聽者」。無論何時調用fire,它都會檢查註冊表('EventManager.events')是否包含按期望名稱的鍵。如果確實如此,它將在數組上運行並調用事件數組中的每個函數。 – 2010-10-08 19:16:55
哦,我現在看得更清楚了。我其實並沒有真正看到這是如何解決雙重綁定的問題。這只是基本上重新創建了Jquery事件總線。 jQuery通過bind/unbind提供了相同的功能。我也沒有看到自定義綁定的好處。那麼我看到一個好處,但沒有解決這個問題的人。我認爲我的問題實際上是應用程序工作方式的總體設計。我們需要更聰明地瞭解我們如何加載我們的JS對象並執行綁定。我有一個臨時解決方案,但我們必須做一個主要的重構才能正確。我會思考這個雖然 – 2010-10-08 19:46:08