我正在使用Backbone,我有一个定义了事件的视图:
....
events: {
'click .search-button': 'setModelTerm',
'change .source-select': 'setModelSourceId',
'change .source-select': 'activateSource'
},
....
我希望在事件change .source-select
触发时触发两种方法。问题是事件对象中的最后一个条目会覆盖前面的条目
如何在一个事件中触发两种方法?
(我试图阻止编写另一种调用这两种方法的方法)
答案 0 :(得分:40)
您可以在事件的哈希中传递包装函数来调用您的两种方法。
来自http://backbonejs.org/#View-delegateEvents
事件以
{"event selector": "callback"}
格式编写。该 回调可以是视图上方法的名称,也可以是直接 功能体。
尝试
events: {
'click .search-button': 'setModelTerm',
'change .source-select': function(e) {
this.setModelSourceId(e);
this.activateSource(e);
}
},
答案 1 :(得分:4)
唯一阻止你添加相同事件/选择器对的是events
是一个散列--jQuery可以处理对同一个元素/事件对的多个绑定。好消息是,jQuery事件允许您通过添加.myNamespace
后缀来命名事件。实际上,这会产生相同的结果,但您可以生成许多不同的密钥。
var MyView = Backbone.View.extend({
events: {
'click.a .foo': 'doSomething',
'click.b .foo': 'doSomethingElse'
'click.c .foo': 'doAnotherThing', // you can choose any namespace as they are pretty much transparent.
},
doSomething: function() {
// ...
},
doSomethingElse: function() {
// ...
},
doAnotherThing: function() {
// ...
},
});
答案 2 :(得分:2)
您视图中的事件哈希只是一种方便的“DSL”。只需在initialize
内手动绑定您的第二个事件。
events: {
'click .search-button': 'setModelTerm'
},
initialize: function () {
_.bindAll(this);
this.on('click .search-button', this.doAnotherThing);
}