Flex:结果事件多次

时间:2010-05-01 10:16:06

标签: flex events

我正在尝试学习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();
            }

1 个答案:

答案 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();
        }

首先检查是否已经存在'结果'的事件监听器,在这种情况下它将简单地返回。此外,它将删除在调度事件时添加的(匿名)事件侦听器。