2009-08-10 16 views
12

Desidero accedere in modo dinamico a un gruppo di oggetti nel mio mxml. Posso costruire il loro nome/id. In Javascript posso fare getElementById(ID) per ottenere l'oggetto. Come posso fare questo in Actionscript?getElementById equivalente in Actionscript?

Io davvero non può fare getChildByName perché è troppo ingombrante: ho accesso all'oggetto A, che ha un figlio B, che ha un figlio C, che hanno i bambini D, E & F (i loro nomi sono correlate al nome di A). Voglio ottenere D, E & F. Per getChildByName, sembra che io debba usare A per ottenere B, quindi ottenere C, e quindi ottenere D, E & F. E se aggiungere un nuovo genitore a B (cambiare la gerarchia mxml), quindi il codice si romperà ... E io davvero non voglio farlo.

Qualche consiglio? Thx!

Aggiornamento: Quello che sto chiedendo è, come faccio ad accedere all'oggetto D dato il suo nome e/o id, entrambi sono stringhe.

risposta

19

Dal momento che i bambini sono in realtà come "proprietà" del documento, si dovrebbe essere in grado di fare qualcosa del genere:

var elem: Type_of_E = questo [ "constructed_id_of_E" ];

Se si è in un documento secondario del documento, utilizzare parentDocument ["built_id_of_E"] per ottenere l'elemento.

+0

Grazie! Esattamente quello che stavo cercando! – sc45

+0

@Cristian Ivascu nice su IMC :) –

0

Se si utilizza MXML, è necessario utilizzare flex. Se si utilizza Flex, è possibile assegnare gli ID dei propri articoli.

Esempio:

<mx:Button 
     id = "myButton" 
     label = "OK" 
     click = "{myLabel.text = 'Button Pressed!'}"/> 

<mx:Label 
     id = "myLabel" 
     text = "Push the button!"/> 
+0

Nota: quanto sopra è equivalente a dire: var myButton: Button = new Button(); Quando assegni a un componente mxml un id, stai davvero realizzando una variabile ActionScript –

2

In realtà, dopo aver assegnato loro un ID, diventano una variabile membro pubblico dell'elemento specificato. Così, per esempio se si dispone

<mx:Canvas><mx:Label id="myLabel" /></mx:Canvas> 

È possibile accedervi da esso è id come un nome di variabile:

myLabel.text = "Hello world!"; 

fatemi sapere se avete bisogno di maggiori chiarimenti. Se questo non è quello che chiedi, non esitare a commentare e io ne prenderò un'altra.

saluti, Chris

Aggiornamento: Tutti i componenti MXML sono accessibili in questo modo, indipendentemente dal numero di genitori che hanno

1

fa questo lavoro con Flex 4?

Ho una griglia vuota fatta in MXML, poi in actionscript aggiungo in questo ordine:

  • un gridrow (all'interno della griglia) (id = "myGrid")
  • un gridItem (all'interno the gridRow)
  • un combobox (all'interno di gridItem) con un id generato dinamicamente (come "cmb" + i dove i è un intero).

Ho provato questo [ "CMB" 0], myGrid [ "CMB" 0], parentDocument [ "CMB" 0] e ogni volta che sto ottenendo "ReferenceError: Error # 1069: la proprietà non cmb0 trovato su adminUsers e non v'è alcun valore di default" o 'ReferenceError: Error # 1069: la proprietà non cmb0 trovato su mx.containers.Grid e non v'è alcun valore di default'

Nota: 'adminUsers' è la nome della mia domanda

Modifica: se può aiutare qualcuno, ho risolto il mio problema in un modo diverso. Ora sto riempiendo la mia griglia con un ripetitore

<mx:Grid id="myGrid"> 
       <mx:Repeater id="repeater" dataProvider="{lst1}"> 
        <mx:GridRow> 
         <mx:GridItem><mx:Label text="{repeater.currentItem.name}" /></mx:GridItem> 
         <mx:GridItem><mx:ComboBox id="cmb" dataProvider="{lst2}" labelField="comment" /></mx:GridItem> 
        </mx:GridRow> 
       </mx:Repeater> 
      </mx:Grid> 

Ora posso accedere al mio combo in un ciclo con qualcosa di simile:

var combo:ComboBox = cmb[i] as ComboBox; 

:)

1

È possibile utilizzare getChildByName("childname")