【问题标题】:Defining Multiple Comparators for Sorting and Reverse Sorting Appcelerator Backbone Models定义多个比较器以对 Appcelerator 主干模型进行排序和反向排序
【发布时间】:2013-06-23 14:54:55
【问题描述】:

我在新的 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;
}

}

考虑到上述情况,如果可能的话,我只希望对比较器的第二次访问基本上对标题进行反向排序。

感谢您的指导。

克里斯。

【问题讨论】:

标签: sorting backbone.js model appcelerator comparator


【解决方案1】:

要对字符串(不区分大小写)或数字按降序排序,试试这个:

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);
};

【讨论】:

    猜你喜欢
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多