Позвольте мне попробовать обновленный ответ с точки зрения версий ExtJS 4.0-4.2 и выше.
constructor()
- это объект / класс перед созданием метода. И initComponent()
- это компонент перед методом show .
constructor: function(config) {
// ctor #1 - insert code here to modify config or run code to inject config
// probably the cheapest place to make changes - before anything has been built
this.callParent(arguments);
// ctor #2 - insert code here if you need to make changes
// after everything has been rendered and shown, IIUC
},
initComponent: function() {
// this function runs between ctor #1 and ctor #2
// initComponent #1 - the UI component object tree is created,
// (this object and child objects from config { items: [{...}]})
// but they have not yet been rendered to DOM or shown.
this.callParent(arguments);
// initComponent #2 - I believe this is equivalent to ctor #2,
// I would prefer ctor as it is more universal.
}
Для панелей с дочерним или сложным макетом вам, вероятно, потребуется использовать initComponent, потому что вам нужно будет проверять компоненты и управлять ими (граф объектов UI).
Но для отдельных элементов формы (выпадающий список, кнопка и т. Д.) Я придерживаюсь конструктора, который, на мой взгляд, легче (до изменения любой сложной конструкции объекта или DOM) и более универсален. IOW-конструкторы могут использоваться для простого пользовательского интерфейса, моделей и хранилищ данных; последние два не могут использовать initComponent.
Так что я использую initComponent только тогда, когда есть причина для этого. Часто, когда я пишу функцию initComponent, я пытаюсь манипулировать дочерними объектами пользовательского интерфейса, и моим следующим шагом является извлечение этого дочернего элемента управления в его собственный Ext.define (), перемещение пользовательского кода для запуска в дочернем классе элемента управления, который удаляет сложный init из родительской панели. Этот процесс я повторил 4 раза на моей последней странице.