hideOverlay: function () {
if (this.interceptHide && this.interceptHide()) {
return false;
}
window.marvel._dialogShowing = false;
$(document).off('keyup', this.handleKeyup);
$(window).off('scroll.scrolldisabler');
this.$el.addClass('hide');
if (this.onHide) {
this.onHide();
}
},
handleKeyup: function (evt) {
if (evt.keyCode === domKeys.DOM_VK_ESCAPE && !this._ignoreCloseActions) {
this.hideOverlay();
}
}
我在Backbone视图中有上述功能。当调用handleKeyup时,它应该调用hideOverlay;但是,我收到一条消息,说hideOverlay函数未定义。即使它如上所述明确定义。有人可以指出我正确的方向吗?
答案 0 :(得分:2)
我猜你是用这样的东西约束你的handleKeyup
:
$(document).on('keyup', this.handleKeyup);
来自fine manual:
<强>。对()强>
[...]
当jQuery调用处理程序时,this
关键字是对传递事件的元素的引用; [...]
因此this
不是调用handleKeyup
时的视图,而是一些不具有hideOverlay
方法的DOM元素。
快速简便的解决方案是在视图handleKeyup
中绑定initialize
方法:
initialize: function() {
_.bindAll(this, 'handleKeyup');
// Whatever else you're already doing...
}
无论this
如何被调用,handleKeyup
都是视图。