5

當您有一個引用另一個視圖並監聽其事件的視圖時,事件處理程序很好,這對於解耦和可重用性來說非常完美。在視圖設計模式與事件之間進行通信

問題雖然有時我有意見,沒有引用,所以我使用事件聚合器,這是一個全球通知,知道是否發生了什麼事情......但這似乎不正確,當我只是想聽我說的兒童意見,引用,像DOM層次結構中的冒泡事件。

但讓我說,我有這樣一個視圖層次結構:

  • ParentView
    • ChildView
      • ChildView
        • ModalView

我想在ParentView知道什麼時候ModalView觸發事件......我不能使用事件冒泡因爲ModalView是不是在同一個DOM階層,所以我應該在這種情況下使用Event Agregator還是其他?我真的希望事件泡沫適合我的情況。

回答

2

如果你不能使用DOM的層次結構,並且你不想使用事件聚合器,那麼我的第一個直覺就是你需要在你的視圖中構建自己的層次結構。

你可以看看backbone.courier瞭解如何實現自己的事件冒泡系統。

Backbone.courier uses the DOM to detect parent views但您可以實現您自己的父級檢測方法。

所以這是可行的,沒有事件聚合或DOM,但我想你最終會創建和管理自己的層次結構。 由於我們已經有了DOM,所以聞起來很有味道。這肯定會讓我質疑:「我真的需要泡這個事件嗎?」。

對於你的榜樣,最簡單的解決辦法是給你的ModalViewParentView參考,只需調用parentView.listener()當你即使是在ModalView解僱。你真的需要它通過孩子泡嗎?這是否真的需要分離?當你認爲你沒有提及你的其他觀點時,你可能會被限制太多。

這些都是我反問自己的問題。儘管它可能看起來很明顯這可能是最好的解決辦法:

modalView.container = parentView; 

modalView.myEventHandler = function(e) { 
    this.container.myEventHandler(e); 
} 
+0

感謝的人,我想你是對的..在我的情況下,最好的解決辦法可能存在一個ModalView和參考主叫/演示這是有道理的.. 。當ModalView完成並觸發主持人被調用的時候,哪個是最深的ChildView並且它觸發了通知父視圖的觸發器 – mateusmaso 2013-03-03 17:08:26

相關問題