2012-04-17 10 views
16

モデルをコレクションCollection.length-2の位置に挿入する必要があります。コレクションの最後のモデルは、常にコレクションの最後のモデルにとどまるべきです。私はコレクション「ページ」1つの「ページ」モデルを追加して、その順序を変更することで、周囲にそれらを交換しようとしたモデルを特定のインデックスのbackbone.jsコレクションに挿入するにはどうすればよいですか?

var insertedpage = Pages.at(Pages.length-1); 
var lastpage = Pages.at(Pages.length-2); 
insertedpage.set({sequence: Pages.length-1}); 
lastpage.set({sequence: Pages.length}); 

私もしようとした私がこれまで試した

最後のページを削除してから新しいページを追加し、最後のページを追加してください。

var lastpage = Pages.pop(); 
Pages.add({example1: example2}); 
Pages.push(lastpage); 

これらのいずれも機能しませんでした。新しく追加されたページは、コレクションの最後のモデルとして表示されます。この後、何らかの注文関数を呼び出す必要がありますか?

答えて

3

申し訳ありません(対応する時間がありません)が、コンパレータ機能の定義を見てください。ロブHruskaの同様の提案に沿って

http://backbonejs.org/#Collection-comparator

+0

固定してくれてありがとう!私はどのようにそれをやったのか、質問の説明で説明します。 – Dine

+1

@NICCAI - リンクが無効です。 –

54

Backbone.Collection.add()は、インデックスを指定するためのatキーをサポートするoptionsオブジェクトを受け取ります。

{at: index}を指定してindexのコレクションにモデルをスプライスします。

例:簡単な答えを

Pages.add({ foo: bar }, { at: Pages.length - 2 }) 
+0

あなたの答えをありがとう。私のページは属性「シーケンス」によってソートされているようです。新しいモデルを追加するときにオプション "at"を渡しても、シーケンス値は変更されないようです。新しいモデルを追加してシーケンスに応じてコレクションの順序を変更するときに、それらを変更できる方法はありますか? – Dine

+0

ありがとう、それは非常に便利です、前にatオプションについて知りませんでした。私のために固定したものはコンパレータ機能でしたので、私はその答えを受け入れます。 – Dine

9

optionsオブジェクトにatBackbone.Collection.add()を使用します。

Pages = new Backbone.Collection([ 
    {id:1, foo:'bar'}, 
    {id:2, foo:'barista'} /* Last model should remain last */ 
]); 

/* Insert new "page" not at the end (default) but length minus 1 */ 
Pages.add({id:3, foo:'bartender'}, { at: Pages.length - 1 }); 

Pages.at(0).id === 1; // true 
Pages.at(Pages.length - 2).id === 3; // true 
Pages.at(Pages.length - 1).id === 2; // true 

あなたはPages属性sequenceでソートされているようだと述べました。 Pagesコレクションにcomparator関数が定義されていますか?

もう1つの質問は、新しいページが2番目の位置から最後の位置に追加されたときに、コレクションに現在あるすべての既存のページモデルでこの属性sequenceを更新しますか?あるいは、その属性がオリジナルの質問を達成しようと試みたのでしょうか?

+0

ありがとうございました。 – Dine

関連する問題