无法读取未定义的 属性 'bind',Backbone.js

Cannot read property 'bind' of undefined, Backbone.js

我有以下函数和许多绑定...

showDialog: function(data) {
  var dialog = new dialog({
    onOk: function(text) {

      var obj = {
        data: text.data
      };

      this.model.save(obj, {
        method: 'PUT',
        success: function() {
          this.success().bind(this)
        }.bind(this)
      });
    }.bind(this)
  });
  Main.dialogArea.show(dialog);
}

虽然代码有效,但它在控制台中抛出以下错误...

Uncaught TypeError: Cannot read property 'bind' of undefined

错误与以下行有关 this.success().bind(this)

我意识到,如果我改用 var self = this,这个问题就会得到解决...

showDialog: function(data) {
  var self = this;
  var dialog = new dialog({
    onOk: function(text) {

      var obj = {
        data: text.data
      };

      self.model.save(obj, {
        method: 'PUT',
        success: function() {
          self.success()
        }
      });
    }
  });
  Main.dialogArea.show(dialog);
}

如果我这样做,错误就会消失。知道为什么会这样吗?两种情况不应该一样吗?我没有使用 ES6,所以我不能使用箭头函数,我想使用 bind().

应该是

this.success.bind(this)

而不是 this.success().bind(this)。 当前您正在调用函数,函数 returns undefined 并且您正在对其调用 .bind

旁注:

既然你在做

success: function() {}.bind(this)

您不必在其中绑定直接方法调用,即

success: function() {
   this.success();
}.bind(this)

应该可以,或者只是

success: this.success.bind(this)