功能无法识别

时间:2016-02-03 16:40:55

标签: jquery backbone.js

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函数未定义。即使它如上所述明确定义。有人可以指出我正确的方向吗?

1 个答案:

答案 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都是视图。