2

我从 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 时没有找到模型

这是迭代之一:

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?

谢谢

4

2 回答 2

3

您的问题可能是在model = Video评估时它尚未定义。尝试在初始化方法中分配模型

例如

var  Videos = Backbone.Collections.extend({

    localStorage: new Backbone.LocalStorage('inbox.video'),
    url: inbox.api.url + "/program",

    initialize: function () {
      this.model = Video;
    }
})
于 2013-08-19T14:58:49.773 回答
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你所期望的。

看一个简单的演示

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.ModelC2::model会是M

于 2013-08-19T16:35:22.827 回答