Vorrei cercare una risposta aggiornata in termini di versioni 4.0-4.2 ExtJS e oltre.
Il constructor()
è l'oggetto/classe prima di creare il metodo. E initComponent()
è il componente prima di mostrare il metodo.
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.
}
pannelli con bambini o il layout complesso avrete probabilmente bisogno di usare initComponent, perché avrete bisogno di controllare e manipolare i componenti (il grafico oggetto dell'interfaccia utente).
Ma per i singoli elementi del modulo (combobox, pulsante, ecc.), Quindi mi attengo al costruttore, che credo sia più leggero (prima di qualsiasi costruzione di oggetti complessi o modifiche DOM) ed è più universale. I costruttori IOW possono essere utilizzati per UI, modelli e archivi dati semplici; gli ultimi due non possono usare initComponent.
Quindi uso solo initComponent quando c'è un motivo per farlo. Spesso quando scrivo una funzione initComponent sto provando a manipolare gli oggetti dell'interfaccia utente figlio, e il mio prossimo passo è quello di estrarre quel controllo figlio nel proprio Ext.define(), lo spostamento del codice personalizzato da eseguire nella classe controllo figlio, che rimuove il complesso init dal pannello genitore. Questo processo l'ho ripetuto 4 volte nella mia ultima pagina.
Ok, per impostazione predefinita utilizzerò il costruttore come metodo di estensione. Quando ho bisogno di sovrascrivere tramite initComponent, è un segno che sono (troppo) intimo con gli interni della classe. –
Ho trovato anche questo molto utile: http://www.sencha.com/forum/showthread.php?139162-clarification-about-initComponent-constructor-callParent –
I down-modded questo perché il responder è uno dei sviluppatori originali di ExtJS, ma tuttavia conclude la sua risposta con "tuttavia, ci sono alcuni casi in cui è importante" e quindi non ci dice quali. A mio parere, questa non è una risposta alla domanda iniziale - i casi in cui è importante potrebbero offrire una panoramica della query dell'OP "Does initComponent offre chiari vantaggi (s)". –