2012-10-12 66 views
5

i necesidad de crear un componente de forma dinámica mediante un clic de botón. Mis restricciones son:ExtJs componente que selecciona por ID que comienzan con una cadena

  1. Se va a tiene un identificador comienza con una cadena fija como 'myComp_' y seguido por un número aleatorio
  2. En cualquier momento habrá sólo un componente que tiene una identificación comienza por ' myComp_xxx '

Así que antes de crear el componente tengo que verificar si hay algo creado antes y eliminarlo ... Mi problema comienza aquí. Ext.getCmp() quiere la identificación específica. Pero sólo tengo esa cuerda fija: Mycomp _...

¿Hay alguna manera de obtener el componente creado antes ???

Gracias de antemano y lo siento por mi Inglés.

Respuesta

6

Creo que lo que busca es DomQuery.

Ex:

Ext.query("*[id^=myComp_xxx]") 
+0

Lo intenté, pero eso me da elemento DOM. No es el componente. ¿Puedo obtener el componente desde aquí? – DonkeyKong

+1

Creo que 'Ext.get (dom_element)' le dará el componente –

+0

En realidad, no. ['Ext.get()'] (http://docs.sencha.com/extjs/4.2.2/#!/api/Ext-method-get) devuelve el elemento DOM. – MarthyM

2

Necesita utilizar esto: Ext.getCmp(id)

Ext.getCmp("myComp_xxx"); 
+0

creo que no estaba tan claro en la pregunta. esa parte 'xxx' es desconocida. Es un número aleatorio. – DonkeyKong

+0

¿Pero por qué no le das al componente tu identificación aleatoria? Si solo se muestra una vez? No está obligado a dejar que ExtJS maneje la generación de ID. –

+0

¿Me está diciendo que debería deshacerme de la parte aleatoria y crear el componente con una identificación específica? – DonkeyKong

6

Para ExtJs 4.X utilizar Ext.ComponentQuery.query('*[id^=myComp_xxx]');

Para ExtJs 3.X se puede utilizar el siguiente

var el = Ext.query('*[id^=myComp_xxx]'); 
var cmp = Ext.getCmp(el.id); 

O (éste no lo he probado personalmente, pero creo que debería funcionar) si el componente es un hijo de un componente que se puede acceder, a continuación:

var el = parentComp.find("action","btn");

y establecer una propiedad llamada action : btn en el botón config.

0

Otra alternativa si sabe 'dónde' se va a crear su componente es el uso de los métodos up()/down().

E.g. si tiene un botón y desea obtener la forma que está contenida dentro de dentro de un controlador de clic se puede hacer algo como esto:

function myClickHandler(btn) { 
    var form = btn.up('form'); 

    //do something with form 
} 
1

Suena como que usted debe utilizar las cosas normales componente de consulta - en general no es una buena idea usar id. Puede consultar por xtype y por itemId (que puede asignar manualmente).

La siguiente

Ext.ComponentQuery.query('grid form'); 

encontraría todas las cosas con rejilla xtype que tienen formas dentro de ellos en alguna parte.

Ext.ComponentQuery.query('grid #okButton'); 

mientras que el # aquí está diciendo mirada para las redes que tienen algo con itemId 'okButton' en ellos.

Puede anidar esto al nivel que necesite y utilizar otros operadores para ser más específico y, como alguien más lo ha señalado correctamente, puede usar arriba y abajo en los componentes para hacer esto en relación con el componente actual. Vale la pena señalar que, en lugar de obtener una matriz con todos los resultados, obtienes la primera cuando utilizas arriba y abajo.

Ver the documentation para obtener más información.

Véase también el punto 6 de este list of bad practices para evitar más de lo qué

Cuestiones relacionadas