【问题标题】:Cannot read property 'bind' of undefined, Backbone.js无法读取未定义 Backbone.js 的属性“绑定”
【发布时间】:2020-02-15 17:36:53
【问题描述】:

我有以下带有多个绑定的函数...

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

虽然代码可以运行,但它会在控制台中抛出以下错误...

未捕获的类型错误:无法读取未定义的属性“绑定”

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

【问题讨论】:

    标签: javascript backbone.js binding


    【解决方案1】:

    应该是

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-06-16
      • 2022-07-28
      • 1970-01-01
      • 1970-01-01
      • 2018-03-27
      • 2021-11-07
      • 1970-01-01
      • 2017-01-30
      相关资源
      最近更新 更多