Marionette: 触发器和事件可以使用相同的事件配置吗?
Marionette: can you use the same event configuration for a trigger and an event?
如果我为触发器和事件使用相同的事件配置来设置 Marionette 视图,似乎只有触发器会被触发。这是一个简化的示例:单击 .button
应该 运行 show
并触发 select:something
事件。但是,它只会触发事件。
var MyView = Marionette.CompositeView.extend({
ui: {
'button': '.button'
},
triggers: {
'click .button': 'select:something',
},
events: {
'click .button': 'show'
},
show: function() {
// won't fire
}
});
var view = new MyView({});
view.on('select:something', handleSelect); // will fire
Marionette trigger docs 建议将 stopPropogation
设置为 false
会有所帮助,但这并没有改变我的行为:
triggers: {
'click .button': {
event: "select:something",
preventDefault: true,
stopPropagation: false
}
}, ...
Marionette.View delegateEvents 代码是:
// behavior events will be overriden by view events and or triggers
_.extend(combinedEvents, behaviorEvents, events, triggers, behaviorTriggers);
Backbone.View.prototype.delegateEvents.call(this, combinedEvents);
事件将被触发器覆盖,因为事件哈希在 _.extend 中的触发器哈希之前。
您可以在事件和触发器哈希中使用不同的键。代码如下:
var viewtemplate = _.template('<button class="button show-btn">show</button>');
var MyView = Marionette.CompositeView.extend({
template: viewtemplate,
triggers: {
'click .button': 'select:something',
},
events: {
'click .show-btn': 'show'
},
show: function() {
console.log('click .show-btn');
}
});
如果我为触发器和事件使用相同的事件配置来设置 Marionette 视图,似乎只有触发器会被触发。这是一个简化的示例:单击 .button
应该 运行 show
并触发 select:something
事件。但是,它只会触发事件。
var MyView = Marionette.CompositeView.extend({
ui: {
'button': '.button'
},
triggers: {
'click .button': 'select:something',
},
events: {
'click .button': 'show'
},
show: function() {
// won't fire
}
});
var view = new MyView({});
view.on('select:something', handleSelect); // will fire
Marionette trigger docs 建议将 stopPropogation
设置为 false
会有所帮助,但这并没有改变我的行为:
triggers: {
'click .button': {
event: "select:something",
preventDefault: true,
stopPropagation: false
}
}, ...
Marionette.View delegateEvents 代码是:
// behavior events will be overriden by view events and or triggers
_.extend(combinedEvents, behaviorEvents, events, triggers, behaviorTriggers);
Backbone.View.prototype.delegateEvents.call(this, combinedEvents);
事件将被触发器覆盖,因为事件哈希在 _.extend 中的触发器哈希之前。 您可以在事件和触发器哈希中使用不同的键。代码如下:
var viewtemplate = _.template('<button class="button show-btn">show</button>');
var MyView = Marionette.CompositeView.extend({
template: viewtemplate,
triggers: {
'click .button': 'select:something',
},
events: {
'click .show-btn': 'show'
},
show: function() {
console.log('click .show-btn');
}
});