有人可以帮我解决我无法将某些属性应用到我自己的自定义类的问题。这是我的来源:
Ext.define('com.amkor.web.common.client.GridPanel', {
alias : 'Web.common.client.GridPanel',
extend : 'Ext.grid.Panel',
isCheckbox : false,
initComponent : function(){
var me = this;
var sm = (me.isCheckbox)?Ext.create('Ext.selection.CheckboxModel'):'';
Ext.apply(me, {
title : 'Grid',
width : 560,
height : 300,
selModel : sm,
frame : false,
border : false,
forceFit : true,
columnLines : true,
autoLoad : false,
autoDestory : true
});
me.callParent(arguments);
},
getGridSelection : function(){
return this.getSelectionModel().getSelection();
},
removeGridSelection : function(){
this.getStore().remove(this.getGridSelection());
}
});
如您所见,我通过扩展Ext.grid.Panel
定义了新的自定义类,然后通过扩展自定义类com.amkor.web.common.client.GridPanel
来定义新的自定义类。
Ext.define('EvaluationApp.view.EvaluationGrid', {
extend : 'com.amkor.web.common.client.GridPanel',
xtype : 'EnhancementGrid',
initComponent : function(){
Ext.apply(this, {
id : 'evalGrid',
width : 556,
height : 290,
title : 'Wow',
columns : columns,
features : [Ext.create('Ext.grid.feature.Grouping', {
groupHeaderTpl : '<div align="left">연도 : <font color="green">{[values.rows[0].grp_year]}</font> ({rows.length}) </div>'
})]
});
this.callParent(arguments);
}
});
我想将标题从“网格”更改为“哇”,但它不适用。 请给我一些建议。
答案 0 :(得分:0)
Ext.define('com.amkor.web.common.client.GridPanel', {
alias : 'Web.common.client.GridPanel',
extend : 'Ext.grid.Panel',
isCheckbox : false,
title: 'Grid',
initComponent : function(){
var me = this;
var sm = (me.isCheckbox)?Ext.create('Ext.selection.CheckboxModel'):'';
Ext.apply(me, {
width : 560,
height : 300,
selModel : sm,
frame : false,
border : false,
forceFit : true,
columnLines : true,
autoLoad : false,
autoDestory : true
});
me.callParent(arguments);
},
getGridSelection : function(){
return this.getSelectionModel().getSelection();
},
removeGridSelection : function(){
this.getStore().remove(this.getGridSelection());
}
});
注意我是如何将标题配置从Ext.apply
内部移动到类定义的。现在,当创建此网格时,如果传入标题,则将使用该标题。如果未传入标题,则标题将默认为'Grid'
。
要了解这里发生的事情,您需要了解Ext.apply
正在做什么。 Ext.apply
获取传入的第二个对象,并将其属性复制到传入的第一个对象。更多信息可以在文档中找到:http://docs.sencha.com/extjs/4.2.2/#!/api/Ext-method-apply。
因此,在上面的代码中,Ext.apply
将属性复制到me
(等于this
),并从您传入的对象中获取这些属性作为第二个参数,显示如下。
{
width : 560,
height : 300,
selModel : sm,
frame : false,
border : false,
forceFit : true,
columnLines : true,
autoLoad : false,
autoDestory : true
}
因此,上述对象中列出的任何内容都将覆盖this
中找到的相同属性。当您创建或扩展上述类时,添加到其中的任何属性(例如您设置title: 'Wow'
的示例)都将直接添加到this
。正如我之前所说,第二个对象中定义的任何属性都将覆盖this
中定义的任何属性,这就是为什么当你将title: 'Grid'
放在第二个对象中时,它只是覆盖了任何title
属性你在扩展课程时传入了。