Магистраль запускает два метода в одном событии
Я использую Backbone, и у меня есть представление с определенными событиями:
....
events: {
'click .search-button': 'setModelTerm',
'change .source-select': 'setModelSourceId',
'change .source-select': 'activateSource'
},
....
Я хотел бы запустить два метода, когда запускается событие change .source-select
. Проблема в том, что последняя запись в объекте события переопределяет предыдущую запись.
Как я могу вызвать два метода в одном событии?
(Я пытаюсь предотвратить использование другого метода, который вызывает эти два метода)
Ответы
Ответ 1
Вы можете передать функцию-оболочку в свой хэш событий, чтобы вызвать два метода.
От http://backbonejs.org/#View-delegateEvents
События записываются в формате {"event selector": "callback"}
. обратный вызов может быть либо именем метода на представлении, либо прямым функциональное тело.
Try
events: {
'click .search-button': 'setModelTerm',
'change .source-select': function(e) {
this.setModelSourceId(e);
this.activateSource(e);
}
},
Ответ 2
Единственное, что удерживает вас от добавления одной и той же пары событие/селектор, - это то, что 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() {
// ...
},
});
Ответ 3
Хэш хешей событий в вашем представлении - это просто удобство "DSL". Просто привяжите свое второе событие вручную внутри initialize
.
events: {
'click .search-button': 'setModelTerm'
},
initialize: function () {
_.bindAll(this);
this.on('click .search-button', this.doAnotherThing);
}