在ExtJS中,如何在事件发生时突然解除绑定?

时间:2011-04-22 07:46:58

标签: extjs event-handling

目标是仅在第一次点击时显示警告框。

Ext.getCmp('myBtn').on('click', function(){
    alert('Alert this message only in first click.');
    Ext.getCmp('myBtn').un('click', this); // my attempt, still not work
})

谢谢。

3 个答案:

答案 0 :(得分:25)

如果您想要仅触发一次事件,请使用: -

Ext.getCmp('myBtn').on('click', function(){
    alert('Alert this message only in first click.');
}, null, {single: true});

{single:true}将使这个匿名函数在调度后完全运行一次,因此这应该可以满足您的要求。

注意:null实际上是有用的范围转换器。您可能需要这样来更改匿名函数

中的范围

查看ExtJS Events @ http://docs.sencha.com/extjs/5.0.0/core_concepts/events.html

同时查看活动选项@ http://docs-origin.sencha.com/extjs/5.0.0/apidocs/#!/api/Ext.mixin.Observable-method-on

快乐的ExtJS:)

答案 1 :(得分:10)

如果你命名你的匿名函数会有用吗?此外,您可以从方法调用中获取对该按钮的引用,因此您无需使用Ext.getCmp()

Ext.getCmp('myBtn').on('click', function handleClick(button, event){
    alert('Alert this message only in first click.');
    button.removeListener('click', handleClick);
})

答案 2 :(得分:5)

尝试使用命名函数而不是匿名函数。

var myfunction = function() {

   alert('Alert this message only in first click.');
   Ext.getCmp('myBtn').un('click', myfunction);
}

Ext.getCmp('myBtn').on('click',myfunction);