Sẽ không dễ dàng hơn để tạo trình xây dựng cơ sở chuyên biệt từ Backbone.View xử lý sự kế thừa của các sự kiện theo cấu trúc phân cấp.
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
}
Điều này cho phép chúng tôi giảm (hợp nhất) các sự kiện băm xuống cấu trúc phân cấp bất cứ khi nào chúng tôi tạo một 'lớp con' mới (hàm tạo con) bằng cách sử dụng hàm mở rộng được xác định lại.
# 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: ....
}
Bằng cách tạo chế độ xem chuyên biệt: BaseView xác định lại chức năng mở rộng, chúng ta có thể có các cuộc phỏng vấn (như AppView, Mục Xem) muốn kế thừa các sự kiện khai báo của chế độ xem cha mẹ của chúng chỉ đơn giản bằng cách mở rộng từ BaseView hoặc một trong các dẫn xuất của nó.
Chúng tôi tránh sự cần thiết phải lập trình các hàm sự kiện của chúng tôi trong các cuộc phỏng vấn của chúng tôi, trong hầu hết các trường hợp cần phải tham khảo rõ ràng đến hàm tạo cha mẹ.