如何在ExtJS自定义类中正确定义属性
我正在尝试为网格创建一个可重用的标题栏。这需要几个属性,在使用网格标题栏时可以设置这些属性。我遇到的问题是,当我尝试使用该属性时,它是未定义的 我查看了ExtJS是如何做到这一点的,并看到它们在config块中设置了属性。所以我试过了,但运气不好。我还尝试删除配置块并添加属性,结果相同如何在ExtJS自定义类中正确定义属性,extjs,extjs6,extjs6-modern,Extjs,Extjs6,Extjs6 Modern,我正在尝试为网格创建一个可重用的标题栏。这需要几个属性,在使用网格标题栏时可以设置这些属性。我遇到的问题是,当我尝试使用该属性时,它是未定义的 我查看了ExtJS是如何做到这一点的,并看到它们在config块中设置了属性。所以我试过了,但运气不好。我还尝试删除配置块并添加属性,结果相同 Ext.define('ERM.view.mastersite.GridTitleBar', { extend: 'Ext.TitleBar', xtype: 'gridtitlebar',
Ext.define('ERM.view.mastersite.GridTitleBar', {
extend: 'Ext.TitleBar',
xtype: 'gridtitlebar',
margin: '0 0 20 0',
shadow: true,
cls: 'x-big',
style: {
border: 'solid lightgrey 2px'
},
config: {
addNewToolTip: 'test',
},
items: [{
xtype: 'button',
iconCls: 'md-icon-add-circle',
text: 'Add',
align: 'right',
tooltip: this.parent.addNewToolTip,
}],
});
我希望工具提示在默认情况下显示“test”,或者如果默认值被覆盖,我希望它显示被覆盖的字符串
编辑
根据下面的答案进行第二次尝试
Ext.define('ERM.view.mastersite.GridTitleBar', {
extend: 'Ext.TitleBar',
xtype: 'gridtitlebar',
margin: '0 0 20 0',
shadow: true,
cls: 'x-big',
style: {
border: 'solid lightgrey 2px'
},
config: {
addNewToolTip: 'test',
},
initialize: function () {
const me = this;
me.items = [{
xtype: 'button',
text: 'Add',
iconCls: 'md-icon-add-circle',
tooltip: me.getAddNewToolTip(),
}];
this.callParent();
},
});
您正确地定义了属性。你的问题在于你访问它的方式 在构建
项
构造时,此
上下文是加载文件的内容-可能是引导加载程序。奇怪的是,那不会有你的新财产
为了访问新类/对象的属性,需要在创建对象后定义项
构造。一个很好的位置是initComponent
方法
Ext.define('ERM.view.mastersite.GridTitleBar', {
// in here, the 'this' context is whatever loaded the file.
...
config: {
addNewToolTip: 'test',
},
...
initComponent: function() {
// In here, like most methods in ExtJS, the 'this' context is the owning instance.
this.items = [{
xtype: 'button',
...
// Oh, and it's a good idea to use the accessors for config variables
tooltip: this.getAddNewToolTip()
}]
// don't forget to call the parent.
this.callParent(arguments);
});
如果您使用的是现代工具包,请使用initialize方法而不是initComponent了解
this
关键字在JavaScript中的工作方式,以及相关上下文的确定方式,从长远来看,这将为您省去很多痛苦。它在任何方面都不像Java,如果你不小心的话,它会绊倒你。我已经试着做了你上面所做的,我的按钮消失了。我已将项目移动到initComponent中,并确保调用父项。我编辑了错误的注释。:/但是我增加了我的尝试。