仅在actionscript完成后呈现MXML组件

时间:2010-04-02 14:36:21

标签: flex actionscript-3 actionscript adobe mxml

在我的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组件。因此,当创建组件时,它实际上不会获得calc1calc2,并且从那一点开始失败。我知道绑定发生在那之后,但组件及其功能已经开始并且使用null或0初始值运行。

我的解决方案是在创建calc1calc2之后立即在动作脚本中创建组件。通过这种方式,我可以精确控制何时创建

 <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

1 个答案:

答案 0 :(得分:0)

首先尝试将vars设置为零值:

   [Bindable] public var calc1:Number = 0;
   [Bindable] public var calc2:Number = 0;

然后在creationComplete上调用该函数:

<mycomp:Ball 
   compfield1="{calc1}"
   compfield2="{calc2}"
   creationComplete="init()"/>