Подход вроде не очень ember-way, вы обработчиком почти изолировались от структуры фреймворка. Вы же не все приложение собираетесь слушать, а только в каком-то разделе.
Можно через миксин сделать в view как-нибудь так:
App.SaveModelMixin = Ember.Mixin.create({
onGlobalKeyDown: function() {
Ember.$(document).on('keydown', {view: this}, this.globalKeyDown);
}.on('didInsertElement'),
offGlobalKeyDown: function () {
Ember.$(document).off('keydown', this.globalKeyDown);
}.on('willDestroyElement'),
globalKeyDown: function (e) {
if ((e.keyCode === 83) && (e.ctrlKey)) {
e.preventDefault();
App.Tabs.tabs("option", "active"); //узнаем активный в данный момент таб
console.log('ctrl + s');
// e.data.view - представление
// e.data.view.get('controller') - контроллер, можно слать экшены
// e.data.view.get('controller.model') - модель роута
}
}
});
Не уверен правда что это решение крутотягкское.