0

我目前正在使用ES6和Marionette v3重寫我們的木偶代碼庫。最好能夠在不違反德米特法的情況下處理人偶模塊之間的通信

我創建了幾個子模塊(ProductShowRoute,CartManager等),這些都是從我的主App開始的。

我想知道你們是如何管理模塊之間的通信。在我們之前的Marionette應用程序中,通訊過於繁忙,並且使用Backbone.Wreqr發送太多內容。

當用戶將產品添加到購物車時,我們的ProductsModule需要讓CartModule知道這一點。如何在不寫太多意大利麪代碼的情況下組織這種溝通? Backbone.Radio/Backbone.Wreqr是很好的工具,但是如果使用不正確(或模塊之間發生太多事情),很難知道哪些事件最終在哪裏結束。

此外,我想知道你是如何改變路線。我讀了一篇Derick Bailey的博客文章,他警告使用App.navigate(‘route’, { trigger: true }),但在Marionette Wires中我看到這發生了幾次。 trigger: true真的這不好用嗎?我們有什麼替代方案?之前我們使用了Backbone.Wreqr,它調用了每個模塊的Router並且改變了路線,但是這看起來像很多來回的通信。

非常感謝!

弗農

回答

0

對於subApps之間的通信,我喜歡每subApp觸發的方法在其頻道指示它們的動作,則有一個事件註冊表某處在App。我喜歡這樣做,這樣我可以清楚地看到事件發生時的一系列操作。另外,在我看來,這不應該是ProductsModules關注的事件被觸發

// Fire an event. 
ProductsModuleChannel.trigger('product:added', productModel); 

// Event Registry 
App.listenTo(ProductModuleChannel, 'product:added', function (productModel) { 
    CartManager.addProduct(productModel) 
}) 

後在問候App.navigate('route', {trigger: true});會發生什麼,我不喜歡的應用是「驅動的路線」。路線應該是應用程序的入口點,但那就是它。我傾向於這樣做以下

... 
showSomePage: function() { 
    // Render some views and do other things 

    // Update the route 
    App.navigate('myRoute'); // Note no 'trigger: true' 
} 

希望這有助於

相關問題