数据绑定无法检测到对“topLevelApplication”的赋值。

11

我正在将一个应用程序从Flex 3迁移到Flex 4。 在某些情况下,有弹出窗口的大小与应用程序宽度和高度绑定。

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

Application.application在4.0中已弃用,因此我已经将其替换为

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

现在编译器给出了一个警告,即无法检测到 topLevelApplication 的数据绑定。

数据绑定将无法检测到 "topLevelApplication" 的赋值。

我的问题是:是否有另一个(可绑定)属性可以用来获得与以前相同的功能?


你需要它可绑定有什么原因吗?我认为 topLevelApplication 的高度和宽度值只有在 swf 文件或浏览器被调整大小时才会改变,此时你所有的控件都将被重新绘制(除非我弄错了)。 - Jason Towne
6个回答

21

只需创建一个类型为对象的变量并使其可绑定:

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

然后使用该变量。

height="{application.height}"

2
这样做可以消除警告,但是它是多余的,并且它并不反映您分配给变量的值的任何更改。这种修复方法是误导性的。 - jediz

3
如果您使用 {this.screen.height},您的警告信息应该会消失。
蒂姆

2
这应该可以通过强制转换实现:
height="{(FlexGlobals.topLevelApplication as Application).height - 32}"

你当前的代码无法正常工作的原因是因为 FlexGlobals.topLevelApplication 被定义为一个对象。


嗨,詹姆斯,我已经尝试过这个了,但仍然收到警告。还有其他选项吗?谢谢。 - Bocaxica
我应该更仔细地阅读错误信息。它无法绑定到“topLevelApplication”,而在FlexGlobals上实际上是不可绑定的。这很遗憾。也许你可以绑定到systemManager.height。 - James Ward

2

我卡了半个小时才发现Bindable只有大写'B'才有效,我这样做后解决了我的问题。

因此,不要使用bindable,只需编写Bindable,因为引用的类是bindable.Bindable


1

我曾经遇到过类似的警告问题,但不是对象问题(使用 [Bindable] 前缀解决),而是使用了 VBox。我需要根据我的 vbox 有多少个子元素来更改图像的源。因此,解决此问题的方法只是使用 "this"。下面是一个示例:

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

如果您不使用"this",IDE将显示类似于对象警告的警告。我希望它能帮助其他人!
最好的问候

0
创建一个可绑定的变量类型,例如 myApp,以获取在 myApp 中定义的所有变量或代码完成。
[Bindable]
private var globals:myApp = FlexGlobals.topLevelApplication as myApp;

然后使用变量。

height="{globals.height}"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接