在我的mxml文件中,我在脚本标记中进行了一些计算,并将它们绑定到自定义组件。
<fx:Script>
<![CDATA[
[Bindable] public var calc1:Number;
[Bindable] public var calc2:Number;
private function init():void {
calc1 = //calculation;
calc2 = //calculation;
}
]]>
</fx:Script>
<mycomp:Ball compfield1="{calc1}" compfield2="{calc2}"/>
问题是在运行actionscript之前正在创建mxml组件。因此,当创建组件时,它实际上不会获得calc1
和calc2
,并且从那一点开始失败。我知道绑定发生在那之后,但组件及其功能已经开始并且使用null或0初始值运行。
我的解决方案是在创建calc1
和calc2
之后立即在动作脚本中创建组件。通过这种方式,我可以精确控制何时创建
<fx:Script>
<![CDATA[
[Bindable] public var calc1:Number;
[Bindable] public var calc2:Number;
private function init():void {
calc1 = //calculation;
calc2 = //calculation;
var Ball:Ball = new Ball(calc1, calc2);
}
]]>
</fx:Script>
但由于我设置组件的方式,这会产生各种其他问题。
有没有办法我仍然可以使用mxml来创建组件,但是只有在<myComp:Ball>
运行并且init()
calc1
被评估后才能控制创建calc2
?
答案 0 :(得分:0)
首先尝试将vars设置为零值:
[Bindable] public var calc1:Number = 0;
[Bindable] public var calc2:Number = 0;
然后在creationComplete上调用该函数:
<mycomp:Ball
compfield1="{calc1}"
compfield2="{calc2}"
creationComplete="init()"/>