0
我有一個彈出窗口組件,它隱藏文檔點擊事件的內容。我的邏輯是這樣的:Extjs文檔點擊事件
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;
.........
},
我有調用popover組件隱藏方法的問題。這樣做會使事件無法有效地導致內存泄漏。
我試圖改變的情況下這樣的結合:
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);
我可以接受在全球範圍內,甚至一個函數,但我不知道我怎樣才能從對象分發PARAMS實例。
這對他來說將無法正常工作,因爲在處理函數中,首先需要確定點擊發生的位置,如果它在錯誤位置點擊,則忽略該事件而不是移除該偵聽器,但每次發生點擊時都會刪除單個選項文檔中的任何地方,哪個用戶絕對不想:) – 2012-03-22 18:20:28
那麼爲什麼不直接將偵聽器放在需要隱藏的組件上呢? – dbrin 2012-03-23 02:22:23