我在新的Alloy实现中定义了一个Appcelerator DataGrid,它依赖于Backbone框架。我已成功实现了水平和垂直滚动DataGrid,它还通过REST查询将数据集合数据集绑定到DataGrid,并允许用户在触摸列标题时对网格进行排序。
我遇到的一个问题就是这个问题。使用Backbone模型实现实现数据模型时,我使用比较器以升序方式对数据模型进行排序。我还扩展了模型以允许用户定义排序条件(传递过滤器的列定义)。
这是一个问题。我知道网格按升序排序的时间。在Backbone模型中是否有可能定义第二个比较器,然后按相反的顺序排序,因此如果用户使用度假,我可以按降序排序(基本上创建两个比较器)?我已经看到了关于反向排序的问题,但没有关于在一个模型中允许两个比较器选项的问题。
我跟随Appcelerator的通用模型就是他们的例子:
exports.definition = {
config : {
// table schema and adapter information
},
extendModel: function(Model) {
_.extend(Model.prototype, {
// Extend, override or implement the Backbone.Model methods
});
return Model;
},
extendCollection: function(Collection) {
_.extend(Collection.prototype, {
// Implement the comparator method.
comparator : function(book) {
return book.get('title');
}
}); // end extend
return Collection;
}
}
考虑到上述情况,我希望第二次访问比较器,以便在可能的情况下对标题进行反向排序。
感谢任何指导。
克里斯。
答案 0 :(得分:0)
要按字符串(不区分大小写)或仅数字的降序排序,请尝试以下操作:
var sort_descending = false; /* assuming you are able to set this variable when you need to sort */
var sort_attribute_name = "title"; /* assuming you can set the attribute name on which you want to sort */
book_list.comparator = function(book){ /* book_list is an instance of book_collection */
if(sort_descending){
if(isNaN(book.get(sort_attribute_name)){
var str = book.get(sort_attribute_name);
str = str.toLowerCase();
str = str.split("");
str = _.map(str, function(letter){
return String.fromCharCode(-(letter.charCodeAt(0))); /* from an SO answer*/
});
}
return -book.get(sort_attribute_name);
}
return book.get(sort_attribute_name);
};