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
), что приводит меня к тому, чтобы наклоняться только над написанием конструктора, поскольку это должно быть универсальным.
Ответы
Ответ 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
только для общих классов.