【问题标题】:How to change/prioritize function execution in flex?如何在 flex 中更改/优先级函数执行?
【发布时间】:2011-11-27 20:42:15
【问题描述】:

所以基本上我有一个组件来调度我的事件:

<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 函数中的匿名函数不执行?
谢谢

【问题讨论】:

  • 你能显示调用匿名函数的代码吗?仅凭这段代码无法判断它为什么没有执行。
  • Calculate.showConfirmation("String Title", function(event:Close):void { if(bla bla bla) //很多代码等... });那就是它被执行的地方。我可以很容易地编写单独的函数,例如:Calculate.showConfirmation("String Title", myNewSeparateFunction),没关系,它仍然不会被调用。

标签: apache-flex actionscript flex4 mxml


【解决方案1】:

函数在调用时执行。在您的情况下,您刚刚声明了它。在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("String Title", myNewSeparateFunction) 然后某处:私有函数 myNewSeparateFunction(event:Close):void{ //code} ?
  • 我不确定我是否完全理解您的建议。计算类具有调用另一个静态函数 showConfirmationImpl 的 showConfirmation 函数。我仍然不明白为什么它没有被调用。应该是这样的 myDispatchedEvent(start)->showConfirmation->showConfirmationImpl->anonymous function->myDispatchedEvent(end)。但是目前是这样的:myDispatchedEvent(start)->myDispatchedEvent(end)->showConfirmation->showConfirmationImpl->匿名函数。
  • 我认为最好将Calculate的列表放在你的问题中。
  • 好吧,无论如何我解决了我的问题,虽然该函数稍后仍会执行,但我找到了另一种解决方法,很难解释。谢谢你们的帮助。我会将您的答案标记为已解决。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2012-06-11
    • 1970-01-01
    • 1970-01-01
    • 2015-10-07
    • 2015-09-20
    • 2015-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多