这是我的第一次尝试。我只是想在窗口上检测keyup和keydown事件。这在我使用addEventListener时有效,但我正在转向jQuery / Backbone框架。
这是有问题的模块。我已经验证事件回调没有触发。
var UserTryView = Backbone.View.extend({
Name: 'UserTry',
keys: {},
events: {
"keyup window" : "keyup",
"keydown window" : "keydown"
},
keydown: function (e) {
console.log('keydown detected');
var self = this;
this.keys[e.keyCode] = null;
$A.testKeys(this.keys, '1684', function () {
self.render();
});
},
keyup: function (e) {
delete this.keys[e.keyCode];
},
render: function () {
new FavoritesView({el: $A.el('#mm')});
new FeedView({el: $A.el('#at_view')});
new AccountView();
// Storage.setObj(packet.server.smalls);
Page.flip('main');
}
});
var user_try_view = new UserTryView();
答案 0 :(得分:0)
事件哈希只会查看元素本身或子元素。这与视图的体系结构一致 - 您通常会避免查找您的视图树(如果您使用的是子视图的概念,我希望您/将会这样)。
对于收听窗口事件,你应该以正常的jQuery方式挂钩,即:
initialize: function() {
_.bindAll(this, 'onWindowKeyUp', 'onWindowKeyDown');
$(window).on({
'keyup': this.onWindowKeyUp,
'keydown': this.onWindowKeyDown
});
},
onWindowKeyUp: function(ev) {
console.log('Key up:', ev)
},
onWindowKeyDown: function(ev) {
console.log('Key down:', ev)
}
请注意_.bindAll
。这是可选的,但这意味着在这些事件中,回调this
引用的视图通常比jQuery为您提供的上下文更有用。