我希望能够在将模型添加到集合后对数据进行排序。如果我不应用silent:true
集合将被渲染,但一切都会加倍。还有其他方法吗?
我在初始化函数上渲染模板并在重置后渲染集合子视图。
我希望能够在将模型添加到集合后对数据进行排序。如果我不应用silent:true
集合将被渲染,但一切都会加倍。还有其他方法吗?
我在初始化函数上渲染模板并在重置后渲染集合子视图。
只需实现一个比较器:
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 元素并继续添加更多元素导致集合模型被渲染两次。所以这是我的解决方案。
$("#currentCategoryListContainer").empty();
this.collection.sort();
通过这种方式,我清除了已经占用的 DOM,以便为要呈现的新项目(排序项目)让路。