我有一个弹出窗口组件,可以在文档单击事件上隐藏其内容。我的逻辑是这样的:
show : function () {
var me = this;
if (me.visible) {
return;
}
Ext.getDoc().on('click', function handleDocClick(e) {
if ( e.within(me.el) ) {
return;
}
if (me.isVisible() && !e.within(me.divEl)) {
me.hide();
Ext.getDoc().un('click', handleDocClick);
}
});
var cfg = me.determineLocation();
me.setLocation(cfg);
me.visible = true;
},
hide : function () {
this.visible = false;
.........
},
我在调用弹出框组件隐藏方法时遇到问题。这样做会导致事件未展开,从而导致内存泄漏。
我尝试像这样更改事件绑定:
Ext.getDoc().on('click', Ext.bind(this.handleDocClick, this));
并隐藏起来:
hide : function () {
Ext.getDoc().un('click', Ext.bind(this.handleDocClick, this));
this.visible = false;
.........
},
但这并没有多大帮助,因为事件无法再次正常展开。
我的问题是如何解决这个问题。最好的解决方案是: 演出中:
Ext.getDoc().un('click', functionClick);
Ext.getDoc().on('click', functionClick);
并隐藏起来:
Ext.getDoc().un('click', functionClick);
我什至可以接受全局范围内的函数,但我不确定如何从对象实例中分发参数。
我不确定你所说的放松是什么意思,但听起来你正试图让这个事件执行一次,然后删除侦听器。在这种情况下,ExtJS observable API 可以为您的监听器提供选项:
单个:布尔值
True 添加一个处理程序来处理下一次事件触发,并且 然后自行移除。 https://docs.sencha.com/extjs/4.0.2/#!/api/Ext.util.Observable-method-on
希望这就是您所需要的。