0

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

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
});

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

4

1 回答 1

1

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

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

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

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

然后监听那个事件:

myApp.on("something:clicked", function(e){
  e.preventDefault();
  console.log("something was clicked");
});
于 2013-11-07T20:23:49.270 回答