Я не уверен, что это та же проблема, что и у вас, но я хотел, чтобы некоторые события были определены в родительском классе, а затем чтобы дочерний класс расширял свойство, не переопределяя его.
Если бы я сделал это так, я бы переопределил то, что определил родитель:
App.parent = Backbone.View.extend({
events: {
'click #button-add': 'onAddButtonClicked'
'click #button-delete': 'onDeleteButtonClicked'
}
onAddButtonClicked: function() {
console.log('onAddButtonClicked');
},
onDeleteButtonClicked: function() {
console.log('onDeleteButtonClicked');
}
});
App.child = App.parent.extend({
initialize: function() {
// This looks redundant but it seems to protect App.parent::events
this.events = _.extend({}, this.additionalEvents, this.events);
// THIS IS WRONG and results in errors when I have multiple childdren:
_.extend(this.events, this.additionalEvents); // <-- this seems to change the parent
}
additionalEvents: {
'click #button-additional': 'onOtherButtonClicked'
},
onOtherButtonClicked: function() {
console.log('child:onOtherButtonClicked');
}
});
При расширении родительских событий, таких как:
_.extend(this.events, this.additionalEvents);
Я бы получил «Неопознанная ошибка: метод onOtherButtonClicked не существует» , потому что я изменял поле событий App.parent. App.child2
взрывался, потому что не мог видеть события, которые были помещены туда App.child
.
Изменив его на:
this.events = _.extend({}, this.additionalEvents, this.events);
Мне удалось защитить родителя.