Как изменить / расставить приоритеты выполнения функции в flex? - PullRequest
0 голосов
/ 29 сентября 2011

Итак, в основном у меня есть компонент с отправленным событием:

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

2 голосов
/ 29 сентября 2011

Функции выполняются по вызову.В вашем случае у вас есть только заявление об этом.Вызовите эту функцию где-нибудь внутри 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 голос
/ 29 сентября 2011

Позвольте мне сначала сказать, что то, что вы пытаетесь сделать, довольно странно.Я бы попытался написать другое решение, но это зависит от того, что вы пытаетесь сделать.Если вы расскажете нам больше об этом, мы сможем найти лучший способ достичь вашей цели.Кстати, вы можете сделать что-то вроде этого:

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

Нечто подобное, что вам уже сказал Константинер.Если вы не выполните функцию, передаваемую статической функции в качестве параметра внутри этой статической функции, она не будет выполнена.

...