Вам нужно будет обойти область видимости магистрали для представлений.
когда вы делаете что-то вроде этого:
events:
'click .back': 'showListing'
'keyup': 'goBack'
вы связываете свою функцию goBack
с событием keyup, возникающим в элементе контейнера вашего представления. (по умолчанию div, в котором отображается представление)
вместо того, чтобы делать это, если вы хотите привязать что-то вне вашего представления (у которого нет собственного представления! (*) )
Raffler.Views.EntryShow = Backbone.View.extend({
template: JST['entries/show'],
events: {
'click .back': 'showListing'
},
initialize: function () {
$('body').keyup(this.goBack);
},
showListing: function () {
Backbone.history.navigate("/", trigger: true);
},
goBack: function (e) {
console.log e.type, e.keyCode;
},
render: function () {
$(this.el).html(this.template(entry: @model));
return this;
}
});
(*) примечание , как отмечено выше, лучше всего делать это только тогда, когда элемент, с которым вы хотите связать, не имеет своего собственного представления, если у вас есть представление для полной страницы (представление приложения) или что-то в этом роде) вы можете связать там ключ и просто вызвать событие App.trigger('keypressed', e);
, например.
затем вы можете в представлении EntryShow привязать к событию keypressed
этого приложения.
App.bind('keypressed', goBack);
Имейте в виду, что вы должны делать что-то как задержанное событие или группировать нажатия клавиш в некоторых ситуациях, так как нажатие каждого нажатия клавиши, которое происходит в теле, может сильно повлиять на производительность. особенно в старых браузерах.