0

저는 현재 ES6 및 Marionette v3을 사용하여 Marionette 코드베이스를 다시 작성하고 있습니다.Demeter의 법칙을 위반하지 않고 Marionette 모듈 간의 통신을 처리하는 것이 가장 좋습니다

두 개의 서브 모듈 (ProductShowRoute, CartManager 등)이 모두 내 메인 App에서 시작되었습니다.

저는 여러분이 어떻게 모듈 간의 통신을 관리하는지 궁금합니다. 이전의 Marionette 앱에서는 통신이 너무 바빴고 Backbone.Wreqr을 사용하여 너무 많이 보내졌습니다.

사용자가 장바구니에 제품을 추가하면 ProductsModuleCartModule에 대해 알릴 필요가 있습니다. 스파게티 코드를 너무 많이 쓰지 않고 어떻게 의사 소통을 조직합니까? Backbone.Radio/Backbone.Wreqr은 훌륭한 도구이지만 모듈을 잘못 사용하거나 모듈간에 너무 많은 일이 발생하면 어떤 이벤트가 어디서 끝나는 지 알기가 어렵습니다.

또한 경로를 변경하는 방법에 대해 궁금합니다. 나는 App.navigate(‘route’, { trigger: true })의 사용에 대해 경고 한 Derick Bailey의 블로그 게시물을 읽었지만, Marionette Wires에 나는 이것이 몇 번 일어나는 것을 보았습니다. trigger: true 정말 사용이 나쁜가요? 그리고 우리는 어떤 대안을 가지고 있습니까? 이전에 Backbone.Wreqr을 사용했는데 각 모듈의 Router을 호출하고 경로를 변경합니다.하지만 많은 의사 소통이 앞뒤로 진행되는 것처럼 보입니다.

고맙습니다.

버논 subApps 사이의 통신에

답변

0

, 나는 각 subApp 다음 어딘가에 앱에서 이벤트 레지스트리를 가지고, 자신의 행동을 나타내는 자신의 채널에서하는 방법을 트리거하고 싶다. 나는 사건을 해고 할 때 분명히 행동 목록을 볼 수 있도록 이것을하고 싶다. 또한, 내 생각에 그것은 내가 응용 프로그램을 '중심의 경로'로 좋아하지 않는 이벤트가 App.navigate('route', {trigger: true});에 관해서

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

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

발사 후 어떻게됩니까 ProductsModules 우려 야해. 경로는 응용 프로그램의 시작점이되어야하지만 그 점입니다. 나는 다음과 같은

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

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

희망 같은 것을하는 경향이

을하는 데 도움이