2014-07-06 244 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'哈希中。 –