2012-10-12 11 views
5

ho bisogno di creare un componente dinamicamente con un clic del tasto. Le mie restrizioni sono:Gli ExtJ selezionano il componente con l'id che inizia con una stringa

  1. E 'intenzione di ha un ID inizia con una stringa fissa come 'myComp_' e seguita da un numero a caso
  2. In qualsiasi momento ci sarà un solo componente che ha un id inizia con' myComp_xxx '

Quindi prima di creare il componente devo controllare se è stato creato prima e rimuoverlo ... Il mio problema inizia qui. Ext.getCmp() vuole l'ID specifico. Ma ho solo quella stringa fissa: myComp _...

C'è un modo per ottenere il componente creato prima ???

Grazie in anticipo e mi dispiace per il mio inglese.

risposta

6

Penso che quello che stai cercando è DomQuery.

Es:

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

Ho provato, ma che mi dà elemento DOM. Non il componente. Posso ottenere il componente da qui? – DonkeyKong

+1

Penso 'Ext.get (dom_element)' vi darà la componente –

+0

In realtà, no. ['Ext.get()'] (http://docs.sencha.com/extjs/4.2.2/#!/api/Ext-method-get) restituisce l'elemento DOM. – MarthyM

2

È necessario utilizzare questo: Ext.getCmp(id)

Ext.getCmp("myComp_xxx"); 
+0

credo di non essere stato così chiaro alla domanda. quella parte 'xxx' è sconosciuta. È un numero casuale .. – DonkeyKong

+0

Ma perché non dai al tuo componente il tuo ID casuale? Se viene visualizzato solo una volta? L'utente non è obbligato a consentire a ExtJS di gestire la generazione dell'ID. –

+0

Mi stai dicendo che dovrei liberarmi della parte casuale e creare il componente con un ID specifico? – DonkeyKong

6

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

Per ExtJs 3.X è possibile utilizzare il seguente

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

O (questo non ho provato personalmente, ma penso che dovrebbe funzionare) se il componente è figlio di un componente che è possibile accedere, quindi:

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

e impostare una proprietà chiamata action : btn nella configurazione del pulsante.

0

Un'altra alternativa se si conosce "dove" verrà creato il componente consiste nell'utilizzare i metodi up()/down().

E.g. se si dispone di un pulsante e si desidera ottenere la forma è contenuta all'interno di all'interno di un gestore di clic si può fare qualcosa di simile:

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

    //do something with form 
} 
1

Suona come si dovrebbe utilizzare la roba normale interrogazione componente - in generale non è un buona idea usare id. È possibile eseguire query per xtype e per itemId (che è possibile assegnare manualmente).

Il seguente

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

avrebbero trovato tutte le cose con griglia xtype che hanno forme al loro interno da qualche parte.

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

mentre il # sta dicendo cerca le griglie che hanno qualcosa con itemId 'okButton' in esse.

È possibile annidarlo a qualsiasi livello sia necessario e utilizzare altri operatori per essere più specifici e come qualcuno ha giustamente sottolineato è possibile utilizzare su e giù sui componenti per fare ciò rispetto al componente corrente. Vale la pena notare che, invece di recuperare un array con tutti i risultati, si ottiene solo il primo quando si usa su e giù.

Vedere the documentation per ulteriori informazioni.

veda anche il punto 6 su questo list of bad practices per evitare per più del motivo per cui

Problemi correlati