我希望能够在将模型添加到集合后对数据进行排序。如果我不申请silent:true
,那么该集合将被渲染,但所有内容都会翻倍。还有另一种方式吗?
我在初始化函数上渲染模板,并在重置后渲染集合子视图。
答案 0 :(得分:2)
只需实施一个比较器:
Backbone.Collection.extend({
// ...
comparator: function( doc )
{
var str = doc.get('name') || '';
return str.toLowerCase();
},
// ...
});
答案 1 :(得分:1)
让它工作虽然我会回答我的问题,因为我不确定这是否是最佳答案,所以欢迎评论。
在我看来:
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元素的正常呈现,但如果我使用sort最终触发重置,我的函数不包含上面的代码,结果是它没有清除DOM元素并继续添加更多导致Collection模型呈现两次的元素。所以这是我的解决方案。
$("#currentCategoryListContainer").empty();
this.collection.sort();
通过这种方式,我清除已经占用的DOM,为要呈现的新项目(已排序项目)腾出空间。