我正在使用Backbone.js来呈现项目列表,例如Books。呈现列表后,用户可以选择对它们进行排序。因此,如果用户单击“按标题排序”或“按作者名称排序”,则列表将在客户端进行排序。
window.Book = Backbone.Model.extend({
defaults: {
title: "This is the title",
author: "Name here"
},
在Backbone应用程序的上下文中使用什么是完成此类排序的最佳方法。我在AppView中使用jQuery dom分拣机吗?
答案 0 :(得分:50)
您可能希望查看有关此主题的讨论:https://github.com/documentcloud/backbone/issues/41。
缺点是,当用户选择“按X排序”时,您可以:
comparator
功能
sort
函数(将触发sort
事件)sort
事件,然后(清除并重新绘制项目处理步骤1和1的另一种方法2是拥有自己的方法来调用Collection的sortBy
方法,然后触发View可以监听的自定义事件。
但似乎清理和重绘是最简单(甚至可能是最快)的方式来对View进行排序并使它们与Collection的排序顺序保持同步。
答案 1 :(得分:48)
您可以更新比较器功能,然后调用sort方法。
// update comparator function
collection.comparator = function(model) {
return model.get('name');
}
// call the sort method
collection.sort();
视图将自动重新渲染。
答案 2 :(得分:12)
comparator
var PhotoCollection = Backbone.Collection.extend({
model: Photo,
comparator: function(item) {
return item.get('pid');
}
});
答案 3 :(得分:3)
这种方式效果很好,可以动态排序所有attributes
并处理ascending
或descending
:
var PhotoCollection = Backbone.Collection.extend({
model: Photo,
sortByField: function(field, direction){
sorted = _.sortBy(this.models, function(model){
return model.get(field);
});
if(direction === 'descending'){
sorted = sorted.reverse()
}
this.models = sorted;
}
});