2011-08-31 119 views
0

我写这篇ActionScript代码:removeEventListener似乎没有删除监听

trace("before remove: " + 
    donneesTechniques.hasEventListener(DonneesTechniques.INITIALISATION)); 
donneesTechniques.removeEventListener(DonneesTechniques.INITIALISATION, init); 
trace("after remove: " + 
    donneesTechniques.hasEventListener(DonneesTechniques.INITIALISATION)); 

这段代码的输出是:

before remove: true 
after remove: true 

这怎么可能? donneesTechniques组件具有用于INITIALISATION事件的列表程序,但它似乎不会将其删除...

我通过代码检查了此组件的内存地址,它始终是相同的地址。所以没有删除另一个对象。 removeEventListener没有任何效果,如果听众没有找到,但在我的情况有(按hasEventListener()

+1

实际答案:停止使用as3的魔法字符串事件系统,并切换到更快的速度,并有效的as3信号。 http://johnlindquist.com/2010/01/21/as3-signals-tutorial/没有什么,他们提供了更多的好处,很容易跟踪和删除它们。 – JTtheGeek

+0

因为我是一名实习生,对一个已经存在的(但是如此被窃听)项目进行研究,所以我会问我的团队是否可以互相帮助。顺便说一句,非常感谢你,我会看看这个为我的个人项目! –

+0

我跟团队的其他成员交谈过,他们信服这个信号插槽方法!非常感谢这个链接JTtheGeek! –

回答

1

根据hasEventListener()至少一个听众之一。因此,如果某个其他组件订阅了此事件并且在您删除当前对象中的侦听器后仍然订阅,那么很可能会发生这种情况。

+0

谢谢你的快速答案!你知道我如何检查听众的数量吗? –

+1

这是非常可惜的,但没有办法确定:( – Constantiner

+0

哦!好吧...我会继续我的调查,然后... 奇怪的是,有时听众被删除...这可能意味着它会在首次删除后多次添加,或者我错了吗? –