8

我有一个表格的 CompositeView。我在子 ItemView 中为每一行设置了触发器...

var TableRow = Marionette.ItemView.extend({
    tagName: "tr",
    template: _.template($(TableTemplates).filter('#tableRow').html()),
    triggers: {
        "click td": "click:td"
    }
});

触发器是否应该冒泡到父 CompositeView?

文档...

访问这些 [触发事件的视图的视图、模型和集合属性] 可以更灵活地处理来自多个视图的事件。例如,选项卡控件或展开/折叠小部件(如面板栏)可以从许多不同的视图触发相同的事件,并使用单个函数进行处理。

难道“单一功能”不会在父 CompositeView 中,以便它可以对来自其任何子 ItemViews 的触发器做出反应吗?CompositeView 是如何监听 ItemView 触发器的?

谢谢

4

1 回答 1

14

是的,它们会冒泡。

唯一要记住的是,当从orItemView调用an 时,该触发器将在名称中添加,因此:CompositeViewCollectionViewitemview

click:td会在CompositeViewas中听itemview:click:td

该字符串可以像这样更改:

var CV = Marionette.CollectionView.extend({
  itemViewEventPrefix: "some:prefix"
});

所以你的触发器是some:prefix:click:td

编辑:在较新的版本(不确定起始版本)上,前缀itemview已更改为childview

更多信息在这里:

木偶文档

于 2013-05-24T23:03:18.697 回答