コレクションにモデルを追加した後、データを並べ替えられるようにしたい。適用しない場合silent:true
、コレクションはレンダリングされますが、すべてが2倍になります。別の方法はありますか?
初期化関数でテンプレートをレンダリングし、リセット後にコレクションサブビューをレンダリングしています。
コレクションにモデルを追加した後、データを並べ替えられるようにしたい。適用しない場合silent:true
、コレクションはレンダリングされますが、すべてが2倍になります。別の方法はありますか?
初期化関数でテンプレートをレンダリングし、リセット後にコレクションサブビューをレンダリングしています。
コンパレータを実装するだけです。
Backbone.Collection.extend({
// ...
comparator: function( doc )
{
var str = doc.get('name') || '';
return str.toLowerCase();
},
// ...
});
これが最良の答えかどうかわからないので、質問に答えますが、うまくいきました。コメントを歓迎します。
私の見解では:
initialize : function(){
this.$el.html( this._template );
this.collection.bind('reset', this.LoadItems, this);
this.collection.bind('add', this.AddOneItem, this);
$("#settings-category").trigger("create");
},
LoadItems : function(){
this.collection.each(function(model){
this.view = new CurrentCategoryView({model : model});
$("#currentCategoryListContainer").append(this.view.render().el);
});
$("#currentCategoryListContainer").listview("refresh");
},
これにより、DOM要素の通常のレンダリングが行われますが、最終的にリセットをトリガーする並べ替えを使用すると、関数に上記のコードが含まれないため、DOM要素がクリアされず、さらに要素を追加して、 2回レンダリングされるコレクションモデル。これが私の解決策です。
$("#currentCategoryListContainer").empty();
this.collection.sort();
このようにして、すでに占有されているDOMをクリアして、新しいアイテム(ソートされたアイテム)がレンダリングされるようにします。