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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top