2010-12-21 8 views
11

Estoy migrando una aplicación de Flex 3 a Flex 4. En algunos casos hay ventanas emergentes cuyo ancho y alto está vinculado al ancho y alto de la aplicación .El enlace de datos no podrá detectar asignaciones a "topLevelApplication"

width="{Application.application.width - 24}" 
height="{Application.application.height - 32}" 

Application.application está en desuso en 4.0. por lo que han reemplazado esto con

width="{FlexGlobals.topLevelApplication.width - 24}" 
height="{FlexGlobals.topLevelApplication.height - 32}" 

Ahora el compilador da la advertencia de que los enlaces de datos no pueden ser detectados por topLevelApplication. Hay otro (enlazable) Propiedad algún lugar que puedo utilizar para obtener la misma funcionalidad que antes: Encuadernación

datos no serán capaces de detectar las asignaciones a "topLevelApplication"

Mi pregunta es ?

+0

¿Hay alguna razón por la que necesite que sea vinculable? No creo que los valores de alto y ancho de topLevelApplication cambien a menos que se cambie el tamaño del swf o el navegador, y en ese punto todos los controles se volverán a dibujar de todos modos (a menos que esté equivocado, por supuesto). –

Respuesta

21

Basta con crear una variable de tipo de objeto y que sea capaz de unirse:

[Bindable] 
private var application:Object = FlexGlobals.topLevelApplication; 

Y a continuación, utilizar la variable.

height="{application.height}" 
+2

esto hace que la advertencia desaparezca, pero es redundante y NO refleja ningún cambio en el valor que asigna a la variable. Esta solución es engañosa. – jediz

2

Esto debe trabajar con un reparto:

height="{(FlexGlobals.topLevelApplication as Application).height - 32}" 

La razón por la que no está trabajando con el código actual se debe a FlexGlobals.topLevelApplication se escribe como un objeto.

+0

Hola James, lo he intentado, pero sigo recibiendo las advertencias. ¿Alguna otra opción? Gracias. – Bocaxica

+0

Flex 4.0 o 4.1? –

+0

Flex SDK 4.1 :) – Bocaxica

2

me he quedado atrapado durante media hora y descubrí que Bindable sólo funciona con un capital 'B', lo hice y lo resuelto mi problema.

Por lo tanto, en lugar de encuadernables solo escriba Bindable ya que la clase referida es bindable.Bindable.

1

estaba luchando con una advertencia similar, pero en lugar de un problema de objeto (que se resuelve con el prefijo [Bindable]) estaba usando un VBox. Necesitaba cambiar la fuente de una imagen dependiendo de cuántos hijos tiene mi vbox. Entonces la solución a esto es solo usar "esto" jajaja. he aquí un ejemplo:

<mx:Image width="24" height="24" source="{this.vbBox1.getChildren().length>1 ? 'assets/icons/forwardDisable.png':'assets/icons/forward.png'}"/> 

Si usted no utiliza "este" el IDE le mostrará una advertencia parecida a la que usted tiene con el objeto. ¡Espero que ayude a los demás!

Saludos

3

Si utiliza {this.screen.height} sus advertencias deben desaparecer.

Tim

Cuestiones relacionadas