Backbone 模型给出了此.set不是模型.initialize中的函数

enxuqcxy  于 2022-11-24  发布在  其他
关注(0)|答案(7)|浏览(128)

我有一个模型监听事件update:TotalCost,当属于集合C的任何模型M改变时,该事件从(不相关的)集合C触发。
这个事件是在initialize方法中编写的,如下所示。在接收到该事件时,我得到以下错误:

类型错误:此.set不是函数

此.set({“总销售额”:值});

CostModel = Backbone.Model.extend({     
  defaults: {
    totalSale: 0,
    totalTax: 0
  },

  initialize: function(attrs, options) {
    if(options) {
      if(options.vent) {
        this.vent = options.vent;
      }
    }
            
    this.vent.on("update:TotalCost", function(value) {
      this.set({ "totalSale": value}); **//ERROR HERE**
    });
  }
});
pieyvz9o

pieyvz9o1#

您很可能忘记在模型前添加关键字new,例如:

var user = UserModel();

// instead of 

var user = new UserModel();
insrf1ej

insrf1ej2#

你试过用结束语吗?

CostModel = Backbone.Model.extend({     
  defaults: {
    totalSale: 0,
    totalTax: 0
  },
  initialize: function(attrs, options) {
    var self = this;

    if(options) {
      if(options.vent) {
        this.vent = options.vent;
      }
    }

    this.vent.on("update:TotalCost", function(value) {
      self.set({ "totalSale": value}); 
    });
  }
});
djp7away

djp7away3#

也许您希望this引用当前CostModel示例,为此,您需要将this传递给this.vent.on调用,以便在模型上下文中执行事件回调:

this.vent.on("update:TotalCost", function(value) {
    this.set({ "totalSale": value});
}, this);
du7egjpx

du7egjpx4#

这可能是由于**“设置”适用于模型 *,,而不适用于对象。因此,您可以先将对象转换为模型,然后尝试..
在实施例中:

new Backbone.Model(your_object).set('val', var);
xsuvu9jc

xsuvu9jc5#

出现此错误的另一个原因可能是您尝试在不使用“new”关键字的情况下创建新模型

monwx1rj

monwx1rj6#

当我在Parse中使用它的时候,我得到了这个神秘的错误。我有:

Parse.User().current().escape("facebookID")

......而我本该:

Parse.User.current().escape("facebookID")

删除了额外的(),它现在工作正常。

5fjcxozz

5fjcxozz7#

另一个原因:

// render() method in view object
setInterval(this.model.showName, 3000);

// showName() method in model object
showName: function(){
    console.log(this.get('name')); // this.get is not a function
}

相关问题