2011-09-29 56 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> 

類似的東西類似的東西已經告訴你。如果你不執行你傳遞給靜態函數的函數作爲這個靜態函數中的參數,它將不會被執行。