Apache flex 如何更改flex中的函数执行/确定其优先级?

Apache flex 如何更改flex中的函数执行/确定其优先级?,apache-flex,actionscript,flex4,mxml,Apache Flex,Actionscript,Flex4,Mxml,因此,基本上我有一个已调度事件的组件: <components:MyComp id="Id" myDispatchedEvent(event)/> 所以问题在于我的静态函数的showConfirmation处理程序,若我通过调试,它只会跳过那个函数,继续执行myDispatchedEvent。为什么showConfirmation函数中的匿名函数不执行? 谢谢函数在调用时执行。就你的情况而言,你刚刚声明了这一点。在Calculate.showConfirmation中的某个地方调用

因此,基本上我有一个已调度事件的组件:

<components:MyComp id="Id" myDispatchedEvent(event)/>
所以问题在于我的静态函数的showConfirmation处理程序,若我通过调试,它只会跳过那个函数,继续执行myDispatchedEvent。为什么showConfirmation函数中的匿名函数不执行?

谢谢

函数在调用时执行。就你的情况而言,你刚刚声明了这一点。在
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());
    }
}

函数在调用时执行。就你的情况而言,你刚刚声明了这一点。在
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());
    }
}

首先让我说你想做的事情很奇怪。我会尝试编写一个不同的解决方案,但这取决于您试图做什么。如果你能告诉我们更多,我们可以找到更好的方法来实现你的目标。顺便说一句,你可以这样做:

<?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>

0) {
跟踪(“测试”);
}
否则{
痕迹(“否”);
}
});
}
]]>

类似于康斯坦丁纳已经告诉你的。如果不执行作为此静态函数中的参数传递给静态函数的函数,它将不会被执行。

首先让我说,您尝试执行的操作非常奇怪。我会尝试编写一个不同的解决方案,但这取决于您试图做什么。如果你能告诉我们更多,我们可以找到更好的方法来实现你的目标。顺便说一句,你可以这样做:

<?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>

0) {
跟踪(“测试”);
}
否则{
痕迹(“否”);
}
});
}
]]>

类似于康斯坦丁纳已经告诉你的。如果不执行作为此静态函数中的参数传递给静态函数的函数,则不会执行该函数。

能否显示调用匿名函数的代码?单从这段代码无法判断它为什么不执行.Calculate.showConfirmation(“字符串标题”,函数(事件:Close):void{if(blablablabla)//大量代码等等……});这就是它被执行的地方。我可以很容易地编写单独的函数,比如:Calculate.showConfirmation(“String Title”,myNewSeparateFunction),没关系,它仍然不会被调用。你能告诉我匿名函数调用的代码吗?单从这段代码无法判断它为什么不执行.Calculate.showConfirmation(“字符串标题”,函数(事件:Close):void{if(blablablabla)//大量代码等等……});这就是它被执行的地方。我可以很容易地编写单独的函数,比如:Calculate.showConfirmation(“String Title”,myNewSeparateFunction),没关系,它仍然不会被调用。你的意思是:Calculate.showConfirmation(“String Title”,myNewSeparateFunction),然后在某个地方:私有函数myNewSeparateFunction(事件:Close):void{//code}我不确定我是否完全理解你的建议。Calculate类具有调用另一个静态函数showConfirmationImpl的showConfirmation函数。我还是不明白为什么没有人打电话给它。它应该类似于myDispatchedEvent(开始)->showConfirmation->showConfirmationImpl->匿名函数->myDispatchedEvent(结束)。但目前情况是这样的:myDispatchedEvent(开始)->myDispatchedEvent(结束)->showConfirmation->showConfirmationImpl->匿名函数。我认为最好将Calculate的列表放在您的问题中。无论如何,我解决了我的问题,尽管该函数稍后仍会执行,但我找到了另一种解决方法,很难解释它。谢谢你们的帮助。我会将您的答案标记为已解决。您的意思是:Calculate.showConfirmation(“字符串标题”,myNewSeparateFunction),然后是某处:private function myNewSeparateFunction(事件:Close):void{//code}?我不确定我是否完全理解您的建议。Calculate类具有调用另一个静态函数showConfirmationImpl的showConfirmation函数。我还是不明白为什么没有人打电话给它。它应该类似于myDispatchedEvent(开始)->showConfirmation->showConfirmationImpl->匿名函数->myDispatchedEvent(结束)。但目前情况是这样的:myDispatchedEvent(开始)->myDispatchedEvent(结束)->showConfirmation->showConfirmationImpl->匿名函数。我认为最好将Calculate的列表放在您的问题中。无论如何,我解决了我的问题,尽管该函数稍后仍会执行,但我找到了另一种解决方法,很难解释它。谢谢你们的帮助。我将把你的答案记为已解决。