2

我添加了一个这样的事件:

this.getLetters().element.on({
   tap: me.lettersTap,
   delegate: 'span.letter-hidden'
});

基于用户交互,我正在向这些元素添加另一个类,所以它将是:

<span class="letter-hidden new_class">

我想删除基于“new_class”的事件处理程序,但不知道如何。我试过像:

questionController.getLetters().element.un({
            tap: questionController.lettersTap,
            delegate: 'span.new_class',
            scope: questionController
        });

但它不起作用,如果我在上面的代码中用字母隐藏替换“new_class”,我可以删除它,所以我想如果使用相同的类,可以删除它,这在文档中没有提到。我是不是做错了什么,有一个替代方案会很好......谢谢。

4

1 回答 1

2

您使用了一个委托,因此在您尝试删除它时使用完全相同的委托非常重要。否则 ExtJS 必须认为它是一个不同的元素,这是一个正确的行为。

这是检查已注册侦听器的方式:

(registered.fn === remove.fn && 
 registered.scope === remove.scope && 
 registered.delegate === remove.delegate && 
 registered.order === remove.order)

所以不,没有替代方法。您必须在注册时使用相同的属性取消注册。

注意:Sencha 不使用您的属性在 DOM 中进行查询,它只是在 oberservalbe 侦听器集合中查找已注册的侦听器,就像您交给取消注册的侦听器一样。

于 2013-07-06T11:14:21.600 回答