我正在尝试学习Flex,现在我有了下一个代码:http://pastebin.com/rZwxF7w1
此代码适用于我的登录组件。我想获得一个特殊的字符串来加密我的密码。这个字符串由我的authservice提供。但是当我登录时,我会多次获得Done的警报(pastebin代码中的第69行或此问题底部的代码中的第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();
}
答案 0 :(得分: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();
}
首先检查是否已经存在'结果'的事件监听器,在这种情况下它将简单地返回。此外,它将删除在调度事件时添加的(匿名)事件侦听器。