如何在flex中更改/优先执行函数执行?

时间:2011-09-29 16:28:17

标签: flex actionscript flex4 mxml

所以基本上我有一个发送事件的组件:

<components:MyComp id="Id" myDispatchedEvent(event)/>

在脚本标签中我有这个功能:

private function myDispatchedEvent(event:Event):void  
{  
  //Here I have my static function with title and handler function showConfirmation 
      Calculate.showConfirmation("String Title", function(event:Close):void  
      {  
          if(bla bla bla)  
          //lots of code etc. ...  
      });  
//myDispatchEvent function continues here..  
}

问题在于我的静态函数的showConfirmation处理程序,如果我通过调试,它只是跳过该函数并继续执行myDispatchedEvent。为什么showConfirmation函数中的匿名函数不执行?
感谢

2 个答案:

答案 0 :(得分:2)

函数在调用时执行。在你的情况下,你只是声明它。在Calculate.showConfirmation内的某个地方调用此函数,它将被执行。

如下所示:

public class Calculate
{
    public static function showConfirmation(title:String, func:Function):void
    {
        // The call I'm talking about is here
        func(new Close());
    }
}

答案 1 :(得分:1)

首先我要说的是,你要做的事情很奇怪。我试着编写一个不同的解决方案,但这取决于你想要做什么。您告诉我们更多信息,我们可以找到更好的方法来实现您的目标。顺便说一下,你可以这样做:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx"
               minHeight="600" minWidth="955">
    <fx:Script>
        <![CDATA[
            import mx.events.CloseEvent;

            public static function myFunction(param:String, func:Function):void {
                trace("executing");
                func.apply();
            }

            protected function labelx_clickHandler(event:MouseEvent):void {
                trace("click");
                Tests.myFunction("Test", function():void {
                    if (event.localX > 0) {
                        trace("Test");
                    }
                    else {
                        trace("No");
                    }
                });

            }
        ]]>
    </fx:Script>
    <s:Button id="labelx"
              label="Click me"
              click="labelx_clickHandler(event)"/>
</s:Application>

类似康斯坦纳已经告诉过你的事情。如果你没有执行你作为静态函数内部参数传递给静态函数的函数,它将不会被执行。