2016-11-16 12 views
1

私はフェッチできる独自のurl/apiを持ついくつかのモデルを持っています。複数の異なるモデルクラスを持つバックボーンコレクションをフィード

私はそれらをコレクションに入れておきたいと思います。

  • いい考えのようですか?
  • どのようにそれらを取得しますか? (コレクションから更新したいモデルを取得してから取り出したいと思っています)

理論的な読書/助言があれば教えてください。

+0

可能な複製(HTTP [複数のモデルを持つバックボーンコレクション?]:// stackoverflowの

var BooksAndNotes = Backbone.Collection.extend({ /** * Different models based on the 'type' attribute. * @param {Object} attrs currently added model data * @param {Object} options * @param {Backbone.Model} subclass dependant of the 'type' attribute. */ model: function ModelFactory(attrs, options) { switch (attrs.type) { case "book": return new Book(attrs, options); case "note": return new MTextSession(attrs, options); default: return new Backbone.Model(attrs, options); } }, // fixes this.model.prototype.idAttribute and avoids duplicates modelId: function(attrs) { return attrs.id; }, }); var collection = new BooksAndNotes([{ title: "My Book", type: 'book' }, { title: "note test", type: 'note' }]); 

は、コレクション内の複数のモデルについて同様の質問を参照してください。 .com/questions/14263765/backbone-collection-with-multiple-models) –

答えて

3

コレクションには、任意の未加工オブジェクトまたはBackbone.Modelから派生したモデルを含めることができます。コレクションを取得することは、オブジェクトの配列を返すAPIエンドポイントがある場合のみ意味があります。

特定のモデルを取得する場合は、参照を保持するか、コレクション内にgetという名前を付けてから、fetchを呼び出します。

idの衝突が発生すると問題が発生する可能性があります。同一のIDは同じモデルとみなされ、一緒にマージされます。

var book = new Book({ id: 1, title: "My Book" }), 
    note = new Note({ id: 1, title: "note test" }); 

var collection = new Backbone.Collection([book, note]); 
console.log(collection.length); // 1 

idの衝突を回避する方法:可能な、バックボーンが自分cidを使用する場合は、これらのモデルのIDを使用していない

  • を。
  • GUIDsを使用してください。
  • id属性は、type属性の前にあるように、識別データで構成します。 (book1,note1)。

マルチモデルコレクションを作成する方法は、model propertyを機能として使用することです。デフォルトではidの衝突を防ぎませんが。

関連する問題