Backbone.js 在主干集合中添加模型后自动排序
我希望能够在向集合添加模型后对数据进行排序。如果我不应用Backbone.js 在主干集合中添加模型后自动排序,backbone.js,Backbone.js,我希望能够在向集合添加模型后对数据进行排序。如果我不应用silent:true集合将被渲染,但所有内容都会加倍。还有别的办法吗 我正在初始化函数上呈现模板,并在重置后呈现集合子视图。虽然我会回答我的问题,但它仍能正常工作,因为我不确定这是否是最佳答案,因此欢迎评论 我认为: initialize : function(){ this.$el.html( this._template ); this.collection.bind('reset', this
silent:true
集合将被渲染,但所有内容都会加倍。还有别的办法吗
我正在初始化函数上呈现模板,并在重置后呈现集合子视图。虽然我会回答我的问题,但它仍能正常工作,因为我不确定这是否是最佳答案,因此欢迎评论 我认为:
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元素并继续添加更多元素,从而导致集合模型呈现两次。这就是我的解决方案
$("#currentCategoryListContainer").empty();
this.collection.sort();
通过这种方式,我清除了已经占用的DOM,以便为要呈现的新项目(已排序的项目)让路。只需实现一个比较器:
Backbone.Collection.extend({
// ...
comparator: function( doc )
{
var str = doc.get('name') || '';
return str.toLowerCase();
},
// ...
});
有些代码总是有帮助的,因此我们可以看到您以前尝试过的内容。@Dreyfus始终有
比较器
功能来保持您的模型始终处于排序状态。是的。但我的主要问题在于渲染部分。如果我有一个1,2,3的集合,如果我在不清除DOM的情况下使用sort,结果将是1,2,3,1,2,3,DOM.empty()
的唯一问题是,用户会感觉到屏幕上的闪光,并且会丢失受此DOM删除影响的任何滚动位置。我遇到了同样的问题。有更好的解决办法吗?