childView如何使用marionettejs正确地侦听另一个childView事件?

时间:2015-08-31 11:47:52

标签: javascript events marionette

所以,我有一个layoutView,我们称之为MyLayoutView。在这个布局视图中我 有两个childViews:

return Marionette.LayoutView.extend({
    template: templates.pages.layoutTpl,
    regions: {
        regionTest1: "#test1-view",
        regionTest2: "#test2-view"
    },
    childEvents: {
        'my:event': function (childView, param) {
            console.log(param); //its ok
        }})

并在childView(CompositeView)中,我触发一个事件,如下所示:

this.triggerMethod('my:event', [1,2,3]);

工作正常。我怎样才能从其他childView中听到这个事件?

到目前为止,我在LayoutView中执行此操作:

'my:event': function (childView, params) {
            this.getRegion('regionTest2').currentView.trigger('my:event2');
        },

并在regionTest2中我收听事件:

//in the secord childView
this.on('my:event2', function() {//do whatever...})

捕获另一个childView中的事件。好吧它有效,但我认为写作有点难看......对它的任何建议更好吗?

1 个答案:

答案 0 :(得分:0)

如果您想使用父版式视图来调解子视图之间的事件(您还可以使用triggerMethod instead of triggers),那么您大部分都在正确的轨道上。

然而,它感到丑陋的原因是因为使用父布局视图作为调解器来连接其看似不相交的子视图。有许多方法和消息传递和事件模式可以解决这个问题,还有一些像Backbone.Radio这样的插件(marionette计划用无线电取代wreqr作为依赖)。如果可能的话,我建议利用Backbone Radio的频道来更好地命名和管理你的活动(例如根据他们的目的创建和管理频道),并帮助解耦你的观点。