Невозможно прочитать свойство 'bind' из неопределенного, Backbone.js - PullRequest
0 голосов
/ 18 октября 2019

У меня есть следующая функция с несколькими привязками ...

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: Невозможно прочитать свойство '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 Ответ

2 голосов
/ 25 октября 2019

Должно быть

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...