收听Backbone Marionette的子视图

时间:2013-11-07 18:07:35

标签: marionette

我有一个集合视图,每个项目视图都是一个复合视图,它也有一个项目视图。我想听听最后一个(子子)项目视图中的事件。

View.Block = Marionette.Layout.extend({
    triggers: {
        'click .content': 'block:click'
    }
});

View.Category = Marionette.CompositeView.extend({
    itemView: View.Block
});

View.Categories = Marionette.CollectionView.extend({
    itemView: View.Category
});

在我的控制器中,我只引用了View.Categories:

var categories_view = new View.Categories({
    collection: categories
});

是否可以使用Marionette的内置视图事件收听来自View.Block的点击事件?我尝试了categories_view.on('itemview:block:click'),但这不起作用,因为View.Block不是View.Categories的项目视图,而是View.Category的项目视图。

1 个答案:

答案 0 :(得分:1)

您需要使用模块或应用程序级事件聚合器来实现您的目标:

events: {
  "click .something": "triggerEvent"
},

triggerEvent: function(e){
  myApp.trigger("something:clicked", e);
}

myApp是您的木偶应用程序的实例。)

然后听那个事件:

myApp.on("something:clicked", function(e){
  e.preventDefault();
  console.log("something was clicked");
});