2017-01-19 24 views
0

私は2つの異なるモデル(フォルダとアイテム)を組み合わせたコレクションを持っています。モデルがサーバーからフェッチされると、フォルダーとアイテムが同じIDを持つことができます。成功を取得すると、コレクションにアイテムを追加するためにサーバーからの結果でcollection.resetを呼び出しますが、モデルの1つが重複しているため削除されます(collection.resetはcollection.addを呼び出し、モデルIDのうちの2つは同じです)。私はこれを解決するために変えることができる何か(モデル以外)はありますか?私はmodelIdが1.2で導入されたことを知っていますが、0.9.2からアップグレードすることはできません。backbone.js 0.9.2重複したIDを持つモデルをコレクションに追加する

答えて

2

重複IDでデータを維持しようとしている場合、バックボーンIDは一意である必要があり、サーバーAPIで属性の名前を変更できない場合は、別のIDを使用するようBackboneに指示することをお勧めします。あなたは、サーバーから戻ってくるデータをキャッチし、重複したIDを調整したいの代わり場合

var Collection = Backbone.Collection.extend({ 
 
\t model: Backbone.Model.extend({ 
 
    \t idAttribute: '_id' 
 
    }) 
 
}); 
 

 
var col = new Collection([{id: 1, name: 'a'},{id: 1, name: 'b'}]); 
 

 
$('#result').text(JSON.stringify(col.toJSON()));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/backbone.js/0.9.2/backbone-min.js"></script> 
 
<div id="result"/>

、その後、あなたは、いくつかの値がデータに依存するとIDの前に付けるためにModel.parseを使用することができます(たとえば、 「folder-」および「item-」)。次に、あなたは、

collection.reset(mixedModels, {parse: true}); 
+2

を呼び出します。できるだけjsfiddleのようなオフサイトサービスでオンサイトスタックスニペットを優先します。 –

+0

好奇心から、組み込みの「show console」オプションを使用していないのはなぜですか? –

+0

私は最初にJSFiddleを持っていましたが、コンソールはありませんでした。 – mikeapr4

関連する問題