18

コレクションのCollection.length-2の位置にモデルを挿入する必要があります。コレクションの最後のモデルは、常にコレクションの最後のモデルのままである必要があります。

私がこれまでに試したこと:

コレクション「ページ」に1つの「ページ」モデルを追加し、順序を変更してそれらを入れ替えようとしました。

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);

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

4

3 に答える 3

57

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

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

例:

Pages.add({ foo: bar }, { at: Pages.length - 2 })
于 2012-04-17T16:24:29.763 に答える
9

Rob Hruskaと同じ提案に沿って、オブジェクトBackbone.Collection.add()でwithを使用します。atoptions

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; comparatorPagesコレクションで関数が定義されていますか?

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

于 2012-04-18T06:07:43.450 に答える
3

簡単な答えで申し訳ありませんが(応答する時間がありません)、コンパレータ関数の定義を見てください。

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

于 2012-04-17T18:18:17.900 に答える