Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 触发器和ui节子类化视图子类_Javascript_Marionette - Fatal编程技术网

Javascript 触发器和ui节子类化视图子类

Javascript 触发器和ui节子类化视图子类,javascript,marionette,Javascript,Marionette,我找不到关于这个主题的问题,尽管我猜以前会有人遇到这个问题。对不起,我是在发帖 我正在创建的组件有问题。假设组件实现为ItemView,它将UI中的某些元素定义为“View.UI”散列 如果我想通过子类化该组件并添加额外的ui元素定义来创建该组件的专用版本,会发生什么?我在这里得到的是,新定义覆盖了父定义,因此父功能中断 是否有解决此问题的通用解决方案 我唯一想到的是调整基本木偶视图类的“.extend”功能,以便在子类化时特别处理这些“ui”和“triggers”属性,使用更像“.merge”

我找不到关于这个主题的问题,尽管我猜以前会有人遇到这个问题。对不起,我是在发帖

我正在创建的组件有问题。假设组件实现为ItemView,它将UI中的某些元素定义为“View.UI”散列

如果我想通过子类化该组件并添加额外的ui元素定义来创建该组件的专用版本,会发生什么?我在这里得到的是,新定义覆盖了父定义,因此父功能中断

是否有解决此问题的通用解决方案

我唯一想到的是调整基本木偶视图类的“.extend”功能,以便在子类化时特别处理这些“ui”和“triggers”属性,使用更像“.merge”而不是“u.extend”的东西

还有其他想法吗


请提前感谢,

您可以在继承对象构造函数中使用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);
},