2014-07-06 242 views
0

我有一個我想添加鍵盤快捷鍵的應用程序應用程序。無論用戶在應用中的哪個位置,特定的按鍵組合都應該工作,也就是說,按鍵應該觸發操作,而不管用戶在任何點處的控制器,視圖或路線。爲了做到這一點,我將不得不在我的應用程序中收聽keyPress事件。我嘗試使用一個mixin混合到ApplicationView,不幸的是,keyPress事件只會在視圖具有焦點並且應用程序視圖並不總是有焦點時才被傳播。我想:Ember鍵盤快捷鍵

App.ApplicationView = Em.View.extend(App.KeyBoardShortcutsMixin,{ 
    didInsertElement: function() { 
    this.$().focus(); 
    } 
}); 

這不會達到我的目的,因爲,在keyPress事件之前,用戶與應用程序交互工作正常,但一旦這種觀點失去焦點,它將不再火災。由於我擁有大量的視圖,因此將混合視圖混入到可能在應用程序中創建的每個視圖中看起來很浪費。我怎樣才能以乾淨的方式添加這個功能?

回答

1

我不知道你想和你的快捷鍵做什麼,但如果你的按鍵事件綁定到應用的主體,應當觸發事件無論具有焦點

Ember.$('body').on('keypress', function(e) { 
    console.log('do something'); 
}); 

這裏「輸入密鑰」的插圖:http://emberjs.jsbin.com/zukazazo/2/edit

再次,沒有關於您在mixin中想要完成的更多細節,很難回答您的問題。

+0

我當然可以做到這一點,但我想知道是否有一種更符合實際的方式在燼中完成相同的操作?而不訴諸於jQuery。我想在mixin中執行的操作是向當前活動的控制器發送操作,並讓控制器處理操作。 – Hrishi

+0

從未聽說過頁面級別的內置事件偵聽器......如果您仍想使用,您將不得不使用$('body')或$(document)來監聽事件或手動觸發焦點內置的按鍵視圖掛鉤。 –

+1

這樣做的慣用方式是將事件處理函數'keyPress'添加到視圖中。請參閱http://emberjs.com/api/classes/Ember.View.html#toc_event-names。我預計這個事件會冒起來,但是YMMV。您可能想嘗試將處理程序放在應用程序視圖的'eventManager'哈希中。 –