モデル追加
index
モデルがコレクションに追加されるときにオプションで取得されるため、要素が追加されるパスはかなり単純です。このインデックスはソートされたインデックスです。単純なビューがある場合、特定のインデックスにビューを簡単に挿入できるはずです。
ソート属性の変更
これは少しトリッキーで、答えが手元にありません (私も時々これに苦労しました)最初に追加しました。
バックボーンのドキュメントから:
後でモデル属性を変更しても、コンパレータ関数を含むコレクションは自動的に再ソートされないため、順序に影響するモデル属性を変更した後に sort を呼び出したい場合があります。
そのため、コレクションで sort を呼び出すとreset
、リスト全体の再描画をトリガーするためにフックできるイベントがトリガーされます。
かなり長いリストを扱う場合は非常に効果がなく、ユーザー エクスペリエンスが大幅に低下したり、ハングアップしたりする可能性があります。
したがって、これを回避できるいくつかのことは、次のことができることを知ることです。
- を呼び出してソートした後、常にモデルのインデックスを見つける
collection.indexOf(model)
- イベントからモデルのインデックスを取得します
add
(第 3 引数)
編集:
ちょっと考えてみたらこんな感じになりました。
var Model = Backbone.Model.extend({
initialize: function () {
this.bind('change:name', this.onChangeName, this);
},
onChangeName: function ()
{
var index, newIndex;
index = this.collection.indexOf(this);
this.collection.sort({silent: true});
newIndex = this.collection.indexOf(this);
if (index !== newIndex)
{
this.trigger('reindex', newIndex);
// or
// this.collection.trigger('reindex', this, newIndex);
}
}
});
そして、あなたの見解では、あなたは聞くことができます
var View = Backbone.View.extend({
initialize: function () {
this.model.bind('reindex', this.onReindex, this);
},
onReindex: function (newIndex)
{
// execute some code that puts the view in the right place ilke
$("ul li").eq(newIndex).after(this.$el);
}
});