Подтвердить что ты не робот

InitComponent против конструктора при определении объекта

Когда я должен использовать initComponent по сравнению с constructor?

Я использую initComponent для расширения своих объектов, но, глядя на документы для Ext.define, они видят их, используя конструктор по всему месту. в чем разница?

сравнить:

Ext.define('My.app.PanelPart2', {
    extend: 'My.app.Panel',
    constructor: function (config) {
        this.callSuper(arguments); // calls My.app.Panel constructor
        //...
    }
});

к

Ext.define('My.app.PanelPart2', {
    extend: 'My.app.Panel',
    initComponent: function (config) {
        Ext.apply(this, config);
        this.callParent(arguments);
    }
});

Мне известно о том, что некоторые компоненты не инициализируют (Im смотрит на вас Ext.data.Store), что приводит меня к тому, чтобы наклоняться только над написанием конструктора, поскольку это должно быть универсальным.

4b9b3361

Ответ 1

constructor является стандартом ООП для инициализации экземпляров объектов и доступен в каждом классе ExtJS (все создано Ext.define).

initComponent - расширение ExtJS для инициализации компонентов - классов, которые расширяются Ext.Component. Он использует шаблон шаблонов и позволяет выполнять некоторые стандартные шаги инициализации до и после пользовательского компонента init. Что-то вроде этого:

Ext.Component.constructor() {
    - init events
    - apply config
    - create plugins
    - ...
    - your custom component initialization (initComponent)
    - ...
    - init plugins
    - etc.
}

Мои лучшие оценки - использовать initComponent всякий раз, когда я создаю пользовательский компонент и constructor только для общих классов.