4

我有一个模型侦听事件“update:TotalCost”,当从属于集合的任何模型M时,从(无关的)集合C触发事件C变化。骨干模型给this.set不是在Model.initialize中的函数

该事件在初始化方法中编码如下。上接收I得到以下错误事件:

类型错误:this.set不是函数 this.set({ “totalsale”:值});

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

回答

3

你试过使用封闭?

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

谢谢 - 这个工程!我在上面使用闭包前检查了萤火虫,'这'实际上是窗口对象!我肯定假设'这'将成为模型实例!如果没有看到你如何实例化模型,很难说有什么线索说明为什么要引用'this'现在是窗口 – 2013-05-03 16:12:34

+0

。如果你分享你的代码,我会拨弄它并尝试看看发生了什么。 – 2013-05-03 18:46:53

+0

感谢您提供帮助,唉,更容易的说,然后做了很多其他依赖组件和布局/区域,为我做一个干净的切割可操作的代码为小提琴! :( – 2013-05-03 20:14:49

3

也许你想this指当前CostModel情况下,这样做,你需要传递thisthis.vent.on调用,这样的事件回调将在模型的上下文中执行:

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

我尝试添加“本”是第三个。但仍然有同样的错误。我是否需要使用任何_.bind调用才能工作?我对使用绑定的知识非常粗略。 – 2013-05-03 12:31:04

+0

您是否尝试在事件主体中设置断点并检查“this”是什么? – 2013-05-03 12:51:04

+0

是的,我刚刚检查过萤火虫,'这'实际上是窗口对象!我肯定假设'这'将成为模型实例!关于为什么要引用'this'的任何线索现在是窗口 – 2013-05-03 15:42:22

0

此错误的另一个原因可能是,如果你尝试不使用“new”关键字

0

使用Parse使用它的时候我得到这个神秘的错误,以创建一个新的模式。我:

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

...当我应该有:

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

删除多余的(),现在工作得很好。

10

极有可能你已经忘了你的模型前增加new例如你:

var user = UserModel(); 

// instead of 

var user = new UserModel(); 
0

另一个原因:

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

这可能是由于“设置”作品模型不在对象。所以你可以先转换你的对象到模型中,然后尝试..

例如:

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