2011-08-18 90 views
15

我有一個叫做gallery選項的視圖。當畫廊呈現時(直到它關閉),我想傾聽並採取行動。Backbone.js - 視圖處於活動狀態時添加keydown事件?

我如何在骨幹事件中做到這一點?我嘗試了'keydown X'的所有變體:函數,都沒有工作。

+0

您的畫廊是骨幹視圖還是獨立的html + js? –

+0

這是一個骨幹觀點。 –

+0

向我們展示您的「keydown」事件的選擇器...我認爲您將它們綁定到錯誤的元素 –

回答

22

我只是測試下,它完美地工作:

var view = Backbone.View.extend({ 
    // ... snip ... 
    events: { 
    'keyup :input': 'logKey' 
    ,'keypress :input': 'logKey' 
    } 
    ,logKey: function(e) { 
    console.log(e.type, e.keyCode); 
    } 
}); 

我會回去檢查你的代碼。 Backbone中的所有事件被定義爲連接到viewInstance.el元素的代表。要取消綁定事件,請撥打viewInstance.remove(),其中調用$(viewInstance.el).remove()並清除所有委派的事件。

另請注意,在某些瀏覽器中(我相信Firefox)存在一個已知問題,即某些密鑰(如箭頭鍵)不會冒泡,並且在委派的keypress事件中無法正常工作。如果你抓住特殊鍵,你可能會更好使用keyup和​​。

+2

這是不是假設有問題的視圖包含輸入?我認爲OP在詢問一個特定視圖是簡單渲染的情況 - 想象一下有一個lightbox的圖像或其他東西,並且您想要連接「Escape」來關閉圖像...... – 2011-10-26 07:21:03

+2

你是對的。我的解決方案假定有輸入元素。如果您想對視圖中任何位置的關鍵事件採取行動,則只需排除選擇器(如Backbone文檔所述)。 'events:{keyup:'logKey'}' – fearphage

+9

- 我無法獲得這些全局按鍵/鍵盤/鍵盤的工作。還有其他一些我必須遺忘的細節嗎?你能否指出一個參考或者甚至是一個小提琴來獲得關於文檔範圍事件的更多信息 – streetlight

相關問題