2009-08-10 20 views
12

Quiero acceder dinámicamente a un montón de objetos en mi mxml. Puedo construir su nombre/id. En Javascript puedo hacer getElementById(ID) para obtener el objeto. ¿Cómo puedo hacer esto en Actionscript?getElementById equivalente en Actionscript?

Realmente no puedo hacer getChildByName porque es demasiado engorroso: tengo acceso al objeto A, que tiene un niño B, que tiene un niño C, que tienen los niños D, E & F (sus nombres están relacionados al nombre de A). Quiero obtener D, E & F. Para getChildByName, parece que tengo que usar A para obtener B, luego obtener C, y luego obtener D, E & F. Y si agrego un nuevo padre a B (cambie la jerarquía mxml), entonces el código se romperá ... Y realmente no quiero hacer eso.

¿Algún consejo? ¡Thx!

Actualización: Lo que estoy preguntando es, ¿cómo puedo acceder al objeto D dado su nombre y/o id, que son cadenas de texto?

Respuesta

19

Puesto que los niños son en realidad como "propiedades" del documento, que debería ser capaz de hacer algo como esto:

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

Si se encuentra en un subdocumento del documento, simplemente use parentDocument ["built_id_of_E"] para obtener el elemento.

+0

¡Gracias! ¡Exactamente lo que estaba buscando! – sc45

+0

@Cristian Ivascu nice en IMC :) –

0

Si usa MXML debe utilizar flex. Si está utilizando Flex, puede asignar las identificaciones de sus artículos.

Ejemplo:

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

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

Nota: lo anterior es equivalente a decir: var myButton: Button = new Button(); Cuando le das un ID a un componente mxml, realmente estás haciendo una variable de actionscript –

2

En realidad, una vez que les asigna una ID, se convierten en una variable de miembro público del elemento dado. Así, por ejemplo, si usted tiene

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

Puede acceder a él mediante su ID como nombre de variable:

myLabel.text = "Hello world!"; 

Avísame si necesita más aclaraciones. Si esto no es lo que preguntas, no dudes en comentar y daré otro golpe.

Saludos, Chris

Actualización: Todos los componentes MXML son accesibles esta manera, independientemente del número de padres que tienen

1

hace este trabajo con Flex 4?

he hecho una cuadrícula vacía en MXML, a continuación, en ActionScript añado en este orden:

  • un GridRow (dentro de la cuadrícula) (id = "myGrid")
  • un GridItem (en el interior el gridRow)
  • un cuadro combinado (dentro del elemento gridItem) con un id generado dinámicamente (como "cmb" + i donde i es un número entero).

He intentado esto [ "CMB" 0], myGrid [ "CMB" 0], parentDocument [ "CMB" 0] y cada vez que estoy recibiendo "ReferenceError: Error # 1069: la propiedad no cmb0 encontrar en adminUsers y no hay valor por defecto" o 'ReferenceError: Error # 1069: la propiedad no cmb0 encontrar en mx.containers.Grid y no hay valor por defecto'

Nota: 'adminUsers' es el nombre de mi aplicación

Edición: si puede ayudar a alguien, he resuelto mi problema de otra manera. Ahora estoy llenando mi rejilla con un repetidor

<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> 

Ahora puedo acceder a mis combos en un bucle con algo como:

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

:)

1

Usted puede utilizar getChildByName("childname")