我从API创建新模型后,API具有idAttribute ID 。这是我的模特:
class Video extends Backbone.Model
idAttribute: 'ID'
urlRoot: inbox.api.url + "/program"
收集:
class Videos extends Backbone.Collection
model = Video
localStorage: new Backbone.LocalStorage 'inbox.video'
url: inbox.api.url + "/program"
这里我将模型添加到集合中:
_.each data, (o) =>
model = collection.get o.ID
if model != undefined
model.set o
else
collection.create o
问题是创建的模型的id不是返回的数据中的ID,因此每次都创建一个模型,因为它在查找o.ID时找不到模型
这是 o 上的其中一个:
ChannelID: "b5f52a36-b154-4232-ace0-4075c384bee1"
ID: "10fa83a6-8508-40a3-a901-a40cad2041da"
LastWriteUTC: "2013/08/19 02:51:14 PM"
Name: "Moments_of_Everyday_Life.mp4"
Publisher: "Marthin"
Size: 1043200
为什么模型的id属性未设置为正确的ID?
谢谢
答案 0 :(得分:3)
您的问题可能是在评估model = Video
时尚未定义。尝试在initialize方法中分配模型
例如
var Videos = Backbone.Collections.extend({
localStorage: new Backbone.LocalStorage('inbox.video'),
url: inbox.api.url + "/program",
initialize: function () {
this.model = Video;
}
})
答案 1 :(得分:0)
这不符合你的想法:
class Videos extends Backbone.Collection
model = Video
model = Video
没有将集合的model
属性设置为Video
,它只是创建了一个私有类变量。如果您查看生成的JavaScript,您会看到如下内容:
var Videos = (function(_super) {
var model;
//...
model = Video;
return Videos;
})(Backbone.Collection);
如果您要创建model
属性,则会看到:
Video.prototype.model = Video;
代替。因此,model
的实例不会有Videos
属性,Backbone将使用默认Backbone.Model
且idAttribute: 'id'
。
你可能想这样说:
class Videos extends Backbone.Collection
model: Video
冒号会得到你期待的Videos::model
。
查看simple demo:
class M extends Backbone.Model
class C1 extends Backbone.Collection
model = M
class C2 extends Backbone.Collection
model: M
console.log(C1::model)
console.log(C2::model)
您会看到差异,C1::model
将是Backbone.Model
,C2::model
将是M
。