我在Extjs中有继承,我希望子类属性与父类属性(在本例中为列)合并。
Ext.define('MyApp.view.Child', {
extend: 'MyApp.view.Parent',
title: 'Action Column Child extend ',
alias: 'widget.childpanel',
initComponent: function () {
//this merging very odd.
this.columns = Ext.apply(this.columns, [{
text: 'Other',
dataIndex: 'other'
}]);
this.callParent(arguments)
}
});
两个问题:
1)我正在尝试将子列属性与父项合并,并且合并部分工作,它添加了Other
列,但从父项中删除了第一个。请参阅jsfiddle进行模拟。
2)当我渲染网格及其父级并点击排序时,两个网格都会被排序。它就像一次碰撞。
由于
答案 0 :(得分:1)
我认为您需要clone
父列,并在这种情况下使用push
:
initComponent: function () {
var clonedParentColumns = Ext.clone(this.superclass.columns);
clonedParentColumns.push({
text: 'Other',
dataIndex: 'other'
});
this.columns = clonedParentColumns;
this.callParent(arguments);
}
父母和孩子都使用相同的store
。 (在此示例中,为每个商店创建商店:http://jsfiddle.net/jUE8j/2/)
答案 1 :(得分:1)
Ext.apply用于将一个对象的属性合并到另一个对象。然而,网格的column config是列配置对象的数组。
因此,您只需将附加列配置对象推送到数组:
initComponent: function() {
this.columns.push({
text: 'Other',
dataIndex: 'other'
});
this.callParent(arguments);
}
至于你的第二个问题,已经提到如果你不想在两个网格上应用分类器和过滤器,你需要使用不同的商店。