我希望能夠在向模型添加模型後對數據進行排序。如果我不適用silent:true
收集將渲染,但一切雙打。有另一種方法嗎?在骨幹收集中添加模型後自動排序
我在初始化函數上呈現模板並在重置後呈現集合子視圖。
我希望能夠在向模型添加模型後對數據進行排序。如果我不適用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元素的正常渲染,但如果我使用排序,最終觸發復位的上方,其結果是,它不我的函數不包括代碼不清理DOM元素並繼續添加更多元素,導致Collection模型被渲染兩次。所以這是我的解決方案。
$("#currentCategoryListContainer").empty();
this.collection.sort();
這樣我清除了已被佔用DOM讓位給新的項目(分類項目)進行渲染。
DOM.empty()的唯一問題是用戶將感受到屏幕上的_flash_,他將丟失任何受此DOM刪除影響的滾動位置。 – fguillen
我遇到了同樣的問題。有更好的解決方案嗎? – CamelBlues
同樣在這裏!我們如何解決它? – Makromat
只實現一個比較:
Backbone.Collection.extend({
// ...
comparator: function(doc)
{
var str = doc.get('name') || '';
return str.toLowerCase();
},
// ...
});
一些代碼總是有幫助的,所以我們可以看到你以前試過。 –
@Dreyfus總是有'比較器'功能來保持您的模型始終排序。 – Deeptechtons
是的。但我的主要問題在於渲染部分。如果我有1,2,3集合,如果我使用排序而不清除DOM,結果將是1,2,3,1,2,3 – jongbanaag