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 を探すときにモデルが見つからないため、毎回モデルを作成することです。

これは反復の 1 つである:

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.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.ModelますC2::modelM

于 2013-08-19T16:35:22.827 に答える