无法读取未定义的Backbone.js的属性“绑定”

时间:2019-10-18 17:31:47

标签: javascript backbone.js binding

我具有以下功能并具有许多绑定...

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);
}

尽管代码可以正常工作,但它会在控制台中引发以下错误...

  

未捕获的TypeError:无法读取未定义的属性“ bind”

该错误与以下行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()

1 个答案:

答案 0 :(得分:2)

应该是

this.success.bind(this)

代替this.success().bind(this)。 当前,您正在调用该函数,该函数返回undefined,并且您正在对其调用.bind

旁注:

因为您在做

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

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

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

应该工作,或者只是

success: this.success.bind(this)