initComponent против конструктора при определении объекта - PullRequest
20 голосов
/ 04 октября 2011

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

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

сравнить:

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

с

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

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

1 Ответ

36 голосов
/ 04 октября 2011

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

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

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

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

...