2017-06-30 50 views
0

使用RequireJS模塊構建的BackboneJS應用程序。如何捕捉控制器中的子視圖事件?

A 查看有多個實例子視圖。點擊事件子視圖應運行控制器方法。

初始化順序需要視圖模塊中控制器,所以需要控制器模塊中子視圖將創建一個循環依賴關係。

我寧願創建事件來傳遞數據給控制器。考慮兩種選擇:

  1. 查看偵聽subView事件並觸發自己的事件,由 監聽;
  2. 有第三個應用程序全局對象,subViews在該對象上觸發 事件,Controller在該對象上偵聽?

這裏最好的模式是什麼?

回答

1

木偶具有event bubbling到位。例如,如果視圖觸發「some:event」,則可以在集合視圖上將其作爲「childview:some:event」來聽。如果你有非常深的視圖結構,那麼「childview:... childview:some:event」開始看起來非常糟糕,然後你可能會考慮三個選擇:手動將它們展開,使用像「主幹」這樣的全局消息總線。無線電「或傳遞一些實體來觸發事件。

我個人對全球巴士感覺不好,並且傾向於爲每個有意義的應用部分設計一些實現mediator/observer模式的東西。基本的實現可能是狀態模型,在控制器(或路由器)中創建,並在下面的所有視圖中傳遞 - 然後它們中的任何一個都可以改變狀態或聽取更改。

實際上,作爲控制器在Marionette 3中已被棄用,在這些狀態模型中移動所有控制器邏輯可能是一個好主意。不幸的是,隨着Backbone社區的衰落,我無法找到關於該主題的任何好資源。

1

如果只有一種情況,選項1是正確的。
但是,如果是一個常見的操作,多個事件和許多視圖需要幫助:2選項可能會更好。

相關問題