2010-05-01 47 views
0

我想學習Flex和現在我有下面的代碼:http://pastebin.com/rZwxF7w1軟硬度:結果事件多次

此代碼是我的登錄組件。我想獲得一個特殊的字符串來加密我的密碼。該字符串由我的authservice給出。但是,當我登錄時,我得到了多次警告與完成(第69行pastebin代碼或第4行代碼底部的這個問題)。但我希望它顯示一次。有人知道這段代碼有什麼問題嗎?

湯姆

protected function tryLogin():void { 
       encryptStringResult.addEventListener('result', function(event:ResultEvent):void { 
        var encryptString:String = event.result.toString(); 
        Alert.show('Done'); 
       }); 
       encryptStringResult.token = auth.getEncryptString(); 
      } 

回答

2

這有可能是tryLogin被多次調用,這意味着你可以添加多個事件處理程序,做同樣的事情,以相同的事件。

你可以嘗試以下方法:

protected function tryLogin():void { 
      if (encryptStringResult.hasEventListener('result')) 
       return; 

      encryptStringResult.addEventListener('result', function(event:ResultEvent):void { 
       encryptStringResult.removeEventListener('result', arguments.callee); 
       var encryptString:String = event.result.toString(); 
       Alert.show('Done'); 
      }); 
      encryptStringResult.token = auth.getEncryptString(); 
     } 

它首先請檢查是否與否已經有一個事件偵聽器「結果」在這種情況下,它只會返回。此外,它還將刪除在分派事件時添加的(匿名)事件偵聽器。

+0

謝謝!你知道tryLogin被多次調用嗎?也許這是錯誤的代碼,或者它是flex中的標準嗎? while代碼在這裏找到:http://pastebin.com/rZwxF7w1 – Timo 2010-05-01 10:45:26

+1

短按兩次按鈕,我看不到任何應該導致該行爲。除非當然,Auth實際上多次發送,在這種情況下,您將不得不向我們提供該代碼,以嘗試並幫助您確定問題的原因。 – 2010-05-01 11:09:10

+0

好的,謝謝,我會看看我是否可以解決它。 – Timo 2010-05-01 11:14:36