Backbone.js 主干模型在Model.initialize中未提供此.set函数

Backbone.js 主干模型在Model.initialize中未提供此.set函数,backbone.js,underscore.js,marionette,backbone-events,backbone-model,Backbone.js,Underscore.js,Marionette,Backbone Events,Backbone Model,我让一个模型在通风口上监听一个事件update:TotalCost,当属于集合C的任何模型M发生更改时,该事件从(不相关的)集合C触发 此事件在初始化方法中编码如下。收到事件后,我收到以下错误: 类型错误:此.set不是函数 set({“totalsale”:value}) 可能您希望this引用当前的CostModel实例,为此您需要将this传递给this.vent.on调用,以便在模型上下文中执行事件回调: this.vent.on("update:TotalCost", function

我让一个模型在通风口上监听一个事件
update:TotalCost
,当属于集合C的任何模型M发生更改时,该事件从(不相关的)集合C触发

此事件在初始化方法中编码如下。收到事件后,我收到以下错误:

类型错误:此.set不是函数 set({“totalsale”:value})


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

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

你试过用闭包吗

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

这个错误的另一个原因可能是,如果您试图创建一个新模型而不使用“new”关键字

我在使用Parse时遇到了这个神秘的错误。我有:

Parse.User().current().escape("facebookID")
。。。当我应该有:

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

删除了多余的()项,现在可以正常工作了

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

var user = UserModel();

// instead of 

var user = new UserModel();
另一个原因:

// 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
}

这可能是因为“设置”在模型上工作而不是在对象上工作。因此,您可以先将对象转换为模型,然后尝试

例如:

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

我试着加上“this”作为第三个。但仍然得到同样的错误。我是否需要使用任何u.bind调用才能使其工作?我对使用bind的了解非常粗略。您是否尝试在事件体中设置断点并检查什么是
?是的,我刚刚检查了firebug,“此”实际上是窗口对象!我确信“this”将是模型实例!关于为什么现在使用“this”的引用的线索是什么
this.vent
?无论哪种方式,如果它的主干视图、模型或集合,
这个
应该引用那个实例,而不是window.vent是由木偶主干插件提供的事件聚合。看:谢谢-这很有效!在使用上面的闭包之前,我刚刚签入了firebug,“这”实际上是窗口对象!我确信“this”将是模型实例!如果不了解您是如何实例化模型的,那么现在很难说为什么要引用“this”。如果你分享你的代码,我会摆弄它,并尝试看看发生了什么。感谢你提供帮助,唉,说起来容易做起来容易,因为有很多其他依赖组件和布局/区域,我可以为摆弄做一个清晰的可行代码切割(
new Backbone.Model(your_object).set('val', var);