ExtJS 4 - Ottieni tutti i componenti che sono discendenti di un dato elemento
-
28-10-2019 - |
Domanda
Quale sarebbe il modo più efficiente per trovare tutti i componenti ExtJS che vengono visualizzati come discendenti di un dato elemento HTML?Nota che questo elemento non fa parte di un componente stesso e non è gestito da Ext in alcun modo, è solo HTML grezzo hardcoded.E questo elemento potrebbe non solo contenere solo componenti ext, ma anche altri html gestiti non ext e quell'html può contenere anche componenti ext.Quindi questo significa che la soluzione deve attraversare tutto il DOM, non solo guardare ai figli diretti.
Soluzione
Il mio suggerimento sarebbe quello di esplorare il dominio, controllando l'id di ogni elemento rispetto a Ext.getCmp
, che è una ricerca su una mappa hash.Potresti quindi passare a camminare attraverso i metodi Component
, ma penso che sarebbe fondamentalmente la stessa velocità, e se stai già camminando sul dom per cominciare potresti anche continuare a farlo:
var dom = ...;
var components = [];
Ext.Array.each(Ext.get(dom).query('*'), function(dom) {
var cmp = Ext.getCmp(dom.id);
if (cmp)
components.push(cmp);
});
Ext.get(dom).query('*')
potrebbe svolgere più lavoro di quanto desideri, potrebbe essere più efficiente avere il tuo deambulatore, in questo modo:
function walk(dom, callback) {
if (dom.nodeType === 1) {
callback(dom);
Ext.Array.each(dom.childNodes, function(child) {
walk(child, callback);
});
}
}
var dom = ...;
var components = [];
walk(dom, function(dom) {
var cmp = Ext.getCmp(dom.id);
if (cmp)
components.push(cmp);
});
Tutto ciò presuppone che gli id dom corrispondano agli id dei componenti, che non so se è qualcosa su cui puoi fare affidamento nelle versioni future di Ext.