Pregunta

¿Cuál sería la forma más eficaz de encontrar todos los componentes ExtJS que se representan como descendientes de un elemento HTML determinado?Tenga en cuenta que este elemento no es parte de un componente en sí mismo y no está administrado por Ext de ninguna manera, es solo HTML sin formato codificado.Y este elemento no solo puede contener solo componentes ext, también puede tener otros html no administrados por ext, y ese html también puede contener componentes ext.Eso significa que la solución debe atravesar todo el DOM, no solo mirar a los hijos directos.

¿Fue útil?

Solución

Mi sugerencia sería recorrer el dom, verificando la identificación de cada elemento con Ext.getCmp, que es una búsqueda de mapa hash.Luego, podría cambiar a caminar a través de los métodos de Component, pero creo que sería básicamente la misma velocidad, y si ya está recorriendo el dominio para empezar, es mejor que continúe:

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('*') puede hacer más trabajo del que le gustaría, podría ser más eficiente tener su propio andador, como este:

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);
});

Todo esto supone que los ID de dom coinciden con los ID de componente, lo cual no sé si eso es algo en lo que pueda confiar en futuras versiones de Ext.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top