我的模特和系列看起来像这样。
var MyModel= Backbone.Model.Extend({
foo: function(){
alert("is not working...");
}
});
var MyCol = Backbone.Collection.extend({
models:MyModel,
url: function(){ return '/json_from_server' }, //json data mapped to MyModel
poo:function(){
alert("this works");
}
});
cols = new MyCol();
cols.fetch({
success:function () {
cols.poo(); //this works fine
cols.models.forEach(function(item){
alert(item.get("id")); //It works fine
alert(item.foo()); // this is not working...
});
}
});
当调用item.foo()时,浏览器会抛出错误:Uncaught TypeError:Object [object Object]没有方法' foo' 任何人都可以帮我弄清楚这里出了什么问题。
答案 0 :(得分:5)
在MyCol
对象中,设置models: MyModel
。我认为模型不应该是复数,所以它应该是model: MyModel
。
如果仍然无效,您可能需要在MyModel中使用_.bindAll,如下所示:
var MyModel= Backbone.Model.Extend({
initialize: function() {
_.bindAll(this, "foo");
},
foo: function(){
alert("is not working...");
}
});
你的初始化不能提前工作的原因是因为如上所述,你应该将“模型”作为复数,而它应该是model
。
答案 1 :(得分:4)
在初始化中添加bindAll
应修复它。
var MyModel= Backbone.Model.Extend({
initialize: function() {
_.bindAll(this);
},
foo: function(){
alert("is not working...");
}
});