2010-03-19 8 views
6

Solución:hace addChild ActionScript requiere un objeto de visualización primera

si tiene el mismo problema, addElement() en lugar de addChild() es lo que hizo que


estoy tratando de alejarse de mxml a actionsctipt. Tengo un <s:Rect> que he creado y he establecido sus propiedades, pero tengo problemas para agregarlo.

var aRect:Rect = new Rect(); 
//set properties like aRect.x, aRect.y, aRect.width, aRect.height 

//tried adding it various ways 
addChild(aRect); 
Application.addChild(aRect); 
Application.application.addChild(aRect); 
stage.addChild(aRect); 

Pero sigo obteniendo el error 1067: Conversión implícita de un valor de tipo spark.primitives: Rect a un tipo de relación flash.display: DisplayObject

originalmente en el mxml, que era justo dentro <s:Application> no anidado dentro de nada

<s:Application> 

    <s:Rect id="aRect" x="10" y="10" width="15%" height="15%"> 
     //then fill code here, removed for readability 
    </s:Rect> 

</s:Application> 

Cuál es el problema, pensé ActionScript sería mejor que mxml.

+0

nunca utilizado antes Flex 4, pero tengo curiosidad acerca de esto. Espero que obtenga una respuesta. –

+0

¿Es su código de ejemplo de la clase de documento o de cualquier otra clase? – JanD

+0

@JanD, El código está en la aplicación mxml principal (tengo solo un mxml, no hay componentes ni nada) y, por supuesto, el código actionscript se encuentra en una función init() en la etiqueta del script y se activa en creationComplete, más o menos exactamente lo que se suele hacer, excepto que ahora intento crear estos elementos visuales con th actionscript. – touB

Respuesta

1

Se debe a que Flex 4 cambió significativamente la forma en que funciona la jerarquía de pantallas en aplicaciones basadas en MXML. Esto es un poco confuso ya que addChild() ya no funciona tan simple como lo desearía: tiene que agregar elementos a un proveedor de datos, y luego la lógica de mostrar esos elementos (cuáles agregar dónde, cómo cubrirlos) , etc.) se maneja en otro lado. Sin embargo, es una especie de cambio útil porque te obliga a separar tus preocupaciones de una manera muy concreta. Una vez que haya agregado todos sus elementos a su proveedor de datos, puede intercambiar objetos de diseño a voluntad (incluso en tiempo de ejecución) para cambiar la apariencia de su aplicación.

EDITAR: Técnicamente, no es la lista de visualización sí que han cambiado. Es el hecho de que la unidad básica utilizada por Flex ahora es el "Grupo", incluso s: la aplicación amplía el grupo. Agregue su contenido a un Grupo (o a la Aplicación de nivel superior) y luego asigne al grupo un diseño para indicarle cómo mostrar los elementos que ha agregado.

+0

Myk está interesado en hacer una publicación de blog sobre eso y tal vez agregarlo a su respuesta aquí. La parte sobre "Una vez que haya agregado todos sus elementos a su proveedor de datos, puede intercambiar los objetos de diseño a voluntad (incluso en tiempo de ejecución) para cambiar la apariencia de su aplicación". es especialmente interesante y probablemente sea más comprensible con códigos que con palabras. Gracias. – touB

+0

Ha, supongo que alguien debería escribirlo, sé que el Cookbook Flex 4 de O'Reilly Press lo explica muy bien. Eso debería estar listo pronto. Mientras tanto, buscaré una buena reseña, estoy seguro de que hay algo por ahí; si lo encuentro lo publicaré aquí. – Myk

+0

Aquí hay un video tutorial que lo explica - http://flex4.org/2009/06/23/flex-4-layouts/ Básicamente, la mayoría de las vistas de Flex 4 (incluida s: Aplicación) tienen una propiedad de diseño. Eso determina cómo se muestran los objetos, y puede crear sus propios diseños personalizados además de los cuatro básicos. ¡El video lo explica bastante bien! – Myk

0

Sí, necesita un DisplayObject. No estoy familiarizado con spark.primitives.Rect, pero quizás podrías simplemente crear un nuevo Sprite y llamar a métodos en su objeto Graphics para dibujar el rectángulo.

0

De acuerdo con los documentos en vivo, el método addChild de la clase Application requiere que sea un displayObject.

2

intenté cambiar addChild(aRect); por addElement(aRect); y funcionó perfectamente.

0

A menudo, nos cuesta trabajo agregar elementos flash (swf swc) (mostrar objetos) usando addElement.

Estoy trabajando en una manera de hacer esto ahora :(más aros y saltando

También mi SWC no es visible en el explorador de paquetes (por qué no?)

Cuestiones relacionadas