Marionette.js Mediator('全局'命令vs app控制器)

时间:2013-07-18 21:20:16

标签: design-patterns backbone.js marionette mediator

我目前正在将一个大型骨干应用程序迁移到Marionette,并对如何在模块之间调解活动的更好设计提出意见。

我有一个具有多个模块的应用程序,其中一个模块中的操作可能导致其他模块中发生活动。

由于这些都与应用程序耦合,我可以简单地使用Wreqr接口,其中:

第1单元:

someActivity: ->
   App.vent.trigger("skyFalling")

第2单元:

initialize: ->
   App.vent.on("skyFalling", @closeOrSomething)

第3单元:

initialize: ->
   App.vent.on("skyFalling", @blinkRapidly)

或者最好在Module1中触发一个事件,其中Application(或与App绑定的控制器)监听,然后直接在模块上调用'closeOrSomething'和'blinkRapidly'函数(因为App知道它正在加载的所有模块中。)

应用

skyFallingEventHandler: ->
   Module2.closeOrSomething()
   Module3.blinkRapidly()

1 个答案:

答案 0 :(得分:1)

我选择了app.vent.trigger()app.vent.on()的Mediator方式,并且不与模块的方法绑定。 这样你就可以解耦模块和应用程序了 只需使用Observer + Mediator(通过mediator对象的pub / sub事件)。而且您不需要关心方法名称及其调用。 如果您的模块/类已在内部更改,并且不再需要对某些应用程序的事件作出反应,则只需禁用模块中的事件处理(订阅) 我需要修改Application中的代码。这样另一位工程师就可以修改模块,也不需要修改Application