Bukankah lebih mudah untuk membuat konstruktor dasar khusus dari Backbone.View yang menangani pewarisan peristiwa ke atas hierarki.
BaseView = Backbone.View.extend {
# your prototype defaults
},
{
# redefine the 'extend' function as decorated function of Backbone.View
extend: (protoProps, staticProps) ->
parent = this
# we have access to the parent constructor as 'this' so we don't need
# to mess around with the instance context when dealing with solutions
# where the constructor has already been created - we won't need to
# make calls with the likes of the following:
# this.constructor.__super__.events
inheritedEvents = _.extend {},
(parent.prototype.events ?= {}),
(protoProps.events ?= {})
protoProps.events = inheritedEvents
view = Backbone.View.extend.apply parent, arguments
return view
}
Hal ini memungkinkan kita untuk mengurangi (menggabungkan) peristiwa hash ke bawah hierarki setiap kali kita membuat 'subclass' baru (konstruktor anak) dengan menggunakan fungsi perluasan yang didefinisikan ulang.
# AppView is a child constructor created by the redefined extend function
# found in BaseView.extend.
AppView = BaseView.extend {
events: {
'click #app-main': 'clickAppMain'
}
}
# SectionView, in turn inherits from AppView, and will have a reduced/merged
# events hash. AppView.prototype.events = {'click #app-main': ...., 'click #section-main': ... }
SectionView = AppView.extend {
events: {
'click #section-main': 'clickSectionMain'
}
}
# instantiated views still keep the prototype chain, nothing has changed
# sectionView instanceof SectionView => true
# sectionView instanceof AppView => true
# sectionView instanceof BaseView => true
# sectionView instanceof Backbone.View => also true, redefining 'extend' does not break the prototype chain.
sectionView = new SectionView {
el: ....
model: ....
}
Dengan membuat tampilan khusus: BaseView yang mendefinisikan ulang fungsi perluasan, kita dapat memiliki subview (seperti AppView, SectionView) yang ingin mewarisi kejadian yang dideklarasikan tampilan induknya, cukup lakukan dengan memperluas dari BaseView atau salah satu turunannya.
Kami menghindari kebutuhan untuk mendefinisikan fungsi acara kami secara terprogram dalam subview kami, yang dalam banyak kasus perlu merujuk ke konstruktor induk secara eksplisit.