【发布时间】:2017-04-19 20:51:37
【问题描述】:
在 Marionette 中,我们有一个想要扩展的“主视图”。
var PaginatedDropdown = Marionette.CompositeView.extend({
template: template,
events: {
'click': function () { return 'hello';},
'keyup': function () { return 'goodbye'}
},
childViewOptions: {
tagName: 'li'
}
});
理想的用例是通过更具体的视图来扩展这个视图或类,这些视图将实现主类/视图的大部分功能,并修改一些功能:
var MotorcycleColorChooserDropdown = PaginatedDropdown.extend({
events: {
'mouseenter': function () { return 'vroom'; };
}
});
问题是我们不确定如何选择性地修改事件哈希等内容,或覆盖某些子视图选项。具体来说:
如果
MotorcycleColorChooserDropdown有一个events对象,它将覆盖PaginatedDropdown正在侦听的所有事件。我们如何混搭? (允许在MotorcycleColorChooserDropdown上拥有一个与PaginatedDropdown的事件对象相结合的事件对象?可能无法解决:如果我们想要
PaginatedDropdownclick事件的所有功能,但我们还想在MotorcycleColorChooserDropdown中添加一点点呢?我们是否只需要手动将 Parent 中的所有功能粘贴到 Child 类中?
我们考虑过根本不做这样的扩展视图,或者做像MotorcycleColorChooserDropdown = PaginatedDropdown.extend(); 这样的事情,然后一次做一个MotorcycleColorChooserDropdown.events = PaginatedDropdown.events.extend({...});,但这看起来很混乱,丑陋,我相信有更好的方法。
【问题讨论】:
-
我在一个关于how to create a good base class的回答中解释了这一切。
标签: javascript class backbone.js marionette