2010-04-02 51 views
1

在我的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已创建后,在actionscript中创建组件。这样,我得到,当它的创建

<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()运行和calc1calc2评估?

回答

0

试试你的增值经销商设置为零值第一:

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

然后调用creationComplete功能:

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

谢谢,会尝试一下,并取回。 – basicblock 2010-04-02 14:51:42

+0

没有真正解决我的问题,但我猜它与我的代码有关,所以我选择这个,因为它看起来像一个有效的答案。谢谢您的帮助。 – basicblock 2010-04-03 05:03:09

相关问题