Как правильно определить свойства в пользовательском классе ExtJS - PullRequest
0 голосов
/ 16 октября 2019

Я пытаюсь создать многократно используемую строку заголовка для наших сеток. Для этого потребуется пара свойств, которые можно установить при использовании строки заголовка сетки. Проблема, с которой я сталкиваюсь, заключается в том, что свойство не определено, когда я пытаюсь его использовать.

Я посмотрел, как ExtJS, кажется, делает это, и увидел, что они настраивают свои свойства в блоке конфигурации. Так что я попробовал это без удачи. Я также попытался удалить блок конфигурации и добавить свойство с тем же результатом.

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();
    },
});

Ответы [ 2 ]

0 голосов
/ 17 октября 2019

если вы используете современный инструментарий, используйте метод инициализации вместо initComponent

0 голосов
/ 17 октября 2019

Вы правильно определяете свойство. Ваша проблема в том, как вы к нему обращаетесь.

Во время создания конструкции items контекст this - это то, что загрузило файл - возможно, загрузчик. Как ни странно, у вас не будет вашего нового свойства.

Чтобы получить доступ к свойствам вашего нового класса / объекта, вам нужно определить конструкцию items после создания объекта. Хорошее место для этого - метод 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);
});
...