Javascript 触发器和ui节子类化视图子类
我找不到关于这个主题的问题,尽管我猜以前会有人遇到这个问题。对不起,我是在发帖 我正在创建的组件有问题。假设组件实现为ItemView,它将UI中的某些元素定义为“View.UI”散列 如果我想通过子类化该组件并添加额外的ui元素定义来创建该组件的专用版本,会发生什么?我在这里得到的是,新定义覆盖了父定义,因此父功能中断 是否有解决此问题的通用解决方案 我唯一想到的是调整基本木偶视图类的“.extend”功能,以便在子类化时特别处理这些“ui”和“triggers”属性,使用更像“.merge”而不是“u.extend”的东西 还有其他想法吗Javascript 触发器和ui节子类化视图子类,javascript,marionette,Javascript,Marionette,我找不到关于这个主题的问题,尽管我猜以前会有人遇到这个问题。对不起,我是在发帖 我正在创建的组件有问题。假设组件实现为ItemView,它将UI中的某些元素定义为“View.UI”散列 如果我想通过子类化该组件并添加额外的ui元素定义来创建该组件的专用版本,会发生什么?我在这里得到的是,新定义覆盖了父定义,因此父功能中断 是否有解决此问题的通用解决方案 我唯一想到的是调整基本木偶视图类的“.extend”功能,以便在子类化时特别处理这些“ui”和“triggers”属性,使用更像“.merge”
请提前感谢,您可以在继承对象构造函数中使用u.extend来合并散列 小提琴:
和斯科特的一样,但我觉得这更直截了当一点。我不认为重写构造函数有什么意义。我在研究每种视图类型(ItemView、CompositeView、CollectionView)的构造函数,它们的构建方式各不相同。因此,只需在initialize函数中插入最后一行,它就可以在所有视图中工作 就这样
initialize: function () {
this.ui = _.extend(this.ui, ParentView.prototype.ui);
},
我的解决方案更像这样:
var ParentView=Backbone.marionete.ItemView.extend({
活动:{
'单击@ui.link':'onLinkClick'
},
用户界面:{
链接:“a”,
复选框:“输入[类型=复选框]”
},
onLinkClick:function(){…}
});
var ChildView=ParentView.extend({
事件:\扩展({
'单击@ui.buttonStuff':'onButtonStuffClick'
},ParentView.prototype.events),
用户界面:\ u0.extend({
buttonStuff:'按钮[data action=do_stuff]'
},ParentView.prototype.ui),
onButtonStuffClick:函数(){…}
});
是的,您必须对每个子类都这样做,但是语法相当紧凑
我一直都是这样做的。我还没有尝试过任何牵线木偶项目,但我看不出有任何理由它不起作用
这与minijag的解决方案类似,但效率更高。它不是每次实例化类时都扩展散列,而是在定义类时精确地扩展散列一次。这不是一个通用的解决方案,因为我必须将此行为添加到扩展“ui”和“触发器”部分的所有子类中,但现在可以使用。谢谢你的建议,斯科特。
initialize: function () {
this.ui = _.extend(this.ui, ParentView.prototype.ui);
},