2011-09-29 19 views
0

所以基本上我有我的事件组件分派:如何在flex中更改/区分函数执行的优先级?

<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

您可以显示匿名函数被调用的代码吗?无法独自从这个代码中知道它为什么没有执行。 – RIAstar

+0

Calculate.showConfirmation(“String Title”,function(event:Close):void { if(bla bla bla) // lot of code etc. ... });这是它被执行的地方。我可以轻松地编写单独的函数,如:Calculate.showConfirmation(“String Title”,myNewSeparateFunction),没关系,它仍然不会被调用。 – randomUser56789

回答

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()); 
    } 
} 
+0

你的意思是:Calculate.showConfirmation(“String Title”,myNewSeparateFunction)然后在某处:private function myNewSeparateFunction(event:Close):void {// code}? – randomUser56789

+0

我已将代码添加到我的答案 – Constantiner

+0

我不确定我是否理解您的提案。计算类具有调用另一个静态函数showConfirmationImpl的showConfirmation函数。我仍然不明白为什么它没有被调用。它应该像这样myDispatchedEvent(开始) - > showConfirmation-> showConfirmationImpl->匿名函数 - > myDispatchedEvent(结束)。但目前它是这样的:myDispatchedEvent(start) - > myDispatchedEvent(end) - > showConfirmation-> showConfirmationImpl->匿名函数。 – randomUser56789

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> 

类似的东西类似的东西已经告诉你。如果你不执行你传递给静态函数的函数作为这个静态函数中的参数,它将不会被执行。