如何在ExtJS自定义类中正确定义属性

如何在ExtJS自定义类中正确定义属性,extjs,extjs6,extjs6-modern,Extjs,Extjs6,Extjs6 Modern,我正在尝试为网格创建一个可重用的标题栏。这需要几个属性,在使用网格标题栏时可以设置这些属性。我遇到的问题是,当我尝试使用该属性时,它是未定义的 我查看了ExtJS是如何做到这一点的,并看到它们在config块中设置了属性。所以我试过了,但运气不好。我还尝试删除配置块并添加属性,结果相同 Ext.define('ERM.view.mastersite.GridTitleBar', { extend: 'Ext.TitleBar', xtype: 'gridtitlebar',

我正在尝试为网格创建一个可重用的标题栏。这需要几个属性,在使用网格标题栏时可以设置这些属性。我遇到的问题是,当我尝试使用该属性时,它是未定义的

我查看了ExtJS是如何做到这一点的,并看到它们在config块中设置了属性。所以我试过了,但运气不好。我还尝试删除配置块并添加属性,结果相同

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中,并确保调用父项。我编辑了错误的注释。:/但是我增加了我的尝试。