2012-06-21 78 views
2

我已經使用.on()綁定了Dojo中的keydown事件。事件發生後,我需要解除事件,似乎沒有任何工作。他們的文檔說事件返回了一個具有.remove()方法的對象,但是我不能在我的生活中找出如何訪問或應用此方法。通過Dojo解除事件

任何幫助將不勝感激。

謝謝!

query('#video-topics-input').on('keydown',function(e){ 
     topicsDrop.keyDownFunc(e, e.keyCode); 
    }); 

回答

3

dojo.on返回一個具有上述.remove函數來解除綁定偵聽器的事件句柄。在你的情況下,你需要使用鏈接的dojo.query,它在dojo.NodeList上運行。

這基本上意味着你必須從數組的角度思考,你的上面的例子將返回一個數組與一個條目 - 因爲選擇器是一個ID。

要綁定事件偵聽:

var eventHandles = query('#video-topics-input').on('keydown',function(e){ 
     topicsDrop.keyDownFunc(e, e.keyCode); 
}); 

而取消綁定這些:

eventHandles.forEach(function(handle) { handle.remove() }); 

更有效的方法是不使用查詢查找byId雖然

+0

是的,我是一個道場新手...我最終做了上面的例子使用dom.byId來選擇元素。謝謝。 – user699242

+0

謝謝!正是我想達到的。 – mtchuente

+0

很高興能成爲幫助,仍然:)實際上,我通常有一個'onload'和'onunload'功能,一個ctor/dtor模式到我的對象/頁面。這種方式可以消除ajax應用程序中的內存泄漏 – mschr

0

幾件事情添加到@ mschr的回答

正如他所提到的,如果您正在查找我d你應該使用dojo/dombyid函數,它返回一個單獨的domNode。如果你這樣做,你也可以利用dojo/ononce功能does exactly what it says - 它觸發一次事件處理程序然後斷開連接。

require(['dojo/dom','dojo/on',function(dom,on){ 
    var node = dom.byId('video-topics-input'); 
    on.once(node, 'keydown',function(e){ 
    //some event handler that should only be fired once. 
    }); 
});