どのモデルが新しいかを知るには、コレクションの「追加」イベントを聞きます。個々のアイテムをレンダリングすることができます。この例では
MyView = Backbone.View.extend({
initialize: function(){
_.bindAll(this, "renderItem");
this.collection.bind("add", this.renderItem);
},
renderItem: function(item){
// render the new item here
},
render: function(){
this.collection.each(this.renderItem);
}
});
は、コレクションをレンダリングすることは、個々のアイテムのレンダリングと同じように動作します - それは同じのRenderItem方法「追加」イベントコールを呼び出します。
ソートされたリストを持つシナリオを処理するには...アイテムの位置を把握するためにrenderItemメソッドでいくつかのロジックを実行する必要があります。この多分(未テストコード...ちょうどアイデア)のようなもの:
MyView = Backbone.View.extend({
initialize: function(){
_.bindAll(this, "renderItem");
this.collection.bind("add", this.renderItem);
},
renderItem: function(item){
var itemView = new ItemView({model: item});
itemView.render();
return itemView;
},
render: function(){
this.collection.each(function(item){
var itemView = renderItem(item);
var itemIndex = item.get("index");
var previousItem = this.$(".myList")[itemIndex];
$(itemView.el).insertAfter($(previousItem));
});
}
});
このコードを使用すると、モデルがですることになっていることを順序を知るためにあなたのモデルのindex属性を持っていると仮定し
。私はそれをテストしていないので、このコードがそのまま実行されない可能性が高いことにも注意してください。しかし、それはあなたが書くことを望むコードのアイデアを与える必要があります。
タスクがリストの5番目から3番目になるとします。タスクを2つ上に移動すると、レンダリング方法はどのようになりますか? – fancy
その場合は、メインビュー(=タスクビュー)を再描画する必要があります。ソートの仕方によっては、コレクションを再フェッチする必要があります。 – polarblau