2011-09-29 11 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) //コードがたくさんある... });それが実行される場所です。私は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

私はあなたの提案をよく理解しているかどうかわかりません。 Calculateクラスには、別の静的関数showConfirmationImplを呼び出すshowConfirmation関数があります。私はまだそれが呼ばれていない理由を理解していない。これはmyDispatchedEvent(start) - > showConfirmation-> showConfirmationImpl-> anonymous function-> myDispatchedEvent(end)のようになります。しかし、現時点では、myDispatchedEvent(start) - > myDispatchedEvent(end) - > showConfirmation-> showConfirmationImpl-> anonymous関数のようになります。 – 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> 

Constantinerがすでにあなたに言ったことと似たようなものです。この静的関数内でパラメータとして静的関数に渡す関数を実行しないと、その静的関数は実行されません。