0

В настоящее время я работаю над переписыванием нашей кодовой базы Marionette с использованием ES6 и Marionette v3.Лучше всего общаться с модулями Marionette без нарушения Закона Деметры

Я создал пару подмодулей (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' 
} 

Надеется, что это помогает