主干 - 未捕获类型错误:对象 [对象对象] 没有方法“调用”

Backbone - Uncaught TypeError: Object [object Object] has no method 'call'

本文关键字:对象 调用 有方法 错误 类型 主干      更新时间:2023-09-26

我正在尝试保存一个模型,我可以很好地保存第一个模型,但是如果我保存一个模型,然后直接保存另一个模型 - 我收到以下错误,

Uncaught TypeError: Object [object Object] has no method 'call'

什么会导致此错误?

我的保存代码看起来像这样,

GroupModalHeaderView.prototype.save = function(e) {
  var $this = this;
  this.collection = new app.GroupCollection();
  if(this.$("#group-name").val() !== "") {
    this.collection.add(this.model,{
      merge: true
    });
  }
  this.model.save({
    name: this.$("#group-name").val(),
    async: false,
    wait: true
  }, {
    success: function() {
      var GroupList = new app.GroupListView({
        model: $this.model,
        collection: $this.collection
      });
      var modal = new app.GroupModalView({
        model: $this.model,
        collection: $this.collection
      });
      $this.collection.on("change",  GroupList.render(), this);
      $this.collection.on("change",  modal.render(), this);
      //return $this.cancel();
    }
  });
};

我的模型代码看起来像这样,

    (function() {
  var Group, GroupSearchModel,
    __hasProp = {}.hasOwnProperty,
    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
  Group = (function(_super) {
    __extends(Group, _super);
    function Group() {
      return Group.__super__.constructor.apply(this, arguments);
    }
    Group.prototype.urlRoot = config.base + "api/group/groups";
    Group.prototype.defaults = {
      user_id: "",
      name: "New Group",
      email: "",
      url: "",
      telephone: "",
      mobile: "",
      fax: "",
      people: ""
    };
    Group.prototype.idAttribute = "id";
    return Group;
  })(app.BaseModel);
  GroupSearchModel = (function(_super) {
    __extends(GroupSearchModel, _super);
    function GroupSearchModel() {
      return GroupSearchModel.__super__.constructor.apply(this, arguments);
    }
    return GroupSearchModel;
  })(app.BaseModel);
  this.app = window.app || {};
  this.app.Group = Group;
  this.app.GroupSearchModel = GroupSearchModel;
}).call(this);

我假设这与我的模型末尾的.call(this)有关?

你的代码中有很多古怪的地方,但我的第一个猜测是这个错误导致了你当前的问题。绑定事件处理程序时,通常希望引用但不执行处理程序函数。因此,您想要GroupList.render(不带括号(而不是执行函数的GroupList.render()(带括号(只是引用它而不执行。

$this.collection.on("change",  GroupList.render, this);
$this.collection.on("change",  modal.render, this);
//return $this.cancel();