Два взгляда на событие
Я был добавлен в базу кода Backbone, и одна из модификаций, которые мне нужно сделать, требует дублирования текстового элемента с typeahead. Вместо того, чтобы копировать и вставлять код, я хотел бы повторно использовать код события, но, поскольку я почти ничего не знаю о Backbone, я не уверен, как это сделать. Это должен быть помощник? Если да, куда мне поместить вспомогательный код, чтобы он мог использоваться обоими представлениями? Я бы не стал пытаться просматривать наследование, если это вообще возможно, потому что хотел бы, чтобы изменения были как можно более простыми и минимальными.
events: {
// all other events removed for conciseness.
'typeahead:selected #ud_producerid': 'producerChanged'
}
Мне нужно одно и то же событие с идентичной функциональностью в функции ManufacturerChanged, а также с кодом setupBindings, который связывает заголовок для работы в двух разных представлениях.
1 ответ
Я знаю, что вы сказали, что не хотите использовать наследование, но это легко в Backbone и хорошо подходит для этой задачи.
var TypeaheadBase = Backbone.View.extend({
events: {
'typeahead:selected #ud_producerid': 'producerChanged'
},
producerChanged: function(e) {
...
},
anotherBaseMethod: function() {
...
}
});
var TypeaheadBaseA = TypeaheadBase.extend({
someOtherAMethod: function() {
...
},
// You can do some extra functionality on `producerChanged`.
// (Or you can override by not calling the Base prototype).
producerChanged: function() {
TypeaheadBase.prototype.producerChanged.apply(this, arguments);
// Do some additional stuff.
}
});
var TypeaheadBaseB = TypeaheadBase.extend({
// You can also extend things like events, which could be a hash (Object).
events: function() {
var parentEvents = _.result(TypeaheadBase.prototype, 'events');
return _.extend({}, parentEvents, {
'click a': 'someClickEvent'
});
},
someClickEvent: function() {
...
}
});