क्या Backbone.View से विशेष आधार निर्माता बनाना आसान नहीं होगा, जो पदानुक्रम की घटनाओं की विरासत को संभालता है।
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
}
जब भी हम एक नए 'सबक्लास' (बाल रचनाकार) को पुनर्परिभाषित विस्तार फ़ंक्शन का उपयोग करके बनाते हैं, तो हम घटनाओं को कम (मर्ज) कर सकते हैं।
# 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: ....
}
एक विशेष दृश्य बनाकर: बेस व्यू जो फ़ंक्शन को पुनर्परिभाषित करता है, हमारे पास सबव्यू (जैसे ऐपव्यू, सेक्शन व्यू) हो सकते हैं जो अपने माता-पिता की घोषित घटनाओं को विरासत में प्राप्त करना चाहते हैं, बस बेस व्यू या इसके डेरिवेटिव में से एक का विस्तार करके ऐसा करते हैं।
हम अपने उप-साक्षात्कारों में अपने ईवेंट फ़ंक्शंस को प्रोग्रामेटिक रूप से परिभाषित करने की आवश्यकता से बचते हैं, जो कि ज्यादातर मामलों में स्पष्ट रूप से पैरेंट कंस्ट्रक्टर को संदर्भित करने की आवश्यकता होती है।