所以基本上我有一个发送事件的组件:
<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函数中的匿名函数不执行?
感谢
答案 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>
类似康斯坦纳已经告诉过你的事情。如果你没有执行你作为静态函数内部参数传递给静态函数的函数,它将不会被执行。