首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Backbone.js颠倒排序顺序

使用Backbone.js颠倒排序顺序
EN

Stack Overflow用户
提问于 2011-02-16 15:50:12
回答 14查看 47.3K关注 0票数 90

使用Backbone.js,我得到了一个带有比较器函数的集合。它很好地对模型进行了排序,但我想颠倒顺序。

如何按降序而不是升序对模型进行排序?

EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2011-02-16 16:23:51

嗯,你可以从比较器返回负值。例如,如果我们以Backbone的站点为例,并希望颠倒顺序,它将如下所示:

var Chapter  = Backbone.Model;
var chapters = new Backbone.Collection;

chapters.comparator = function(chapter) {
  return -chapter.get("page"); // Note the minus!
};

chapters.add(new Chapter({page: 9, title: "The End"}));
chapters.add(new Chapter({page: 5, title: "The Middle"}));
chapters.add(new Chapter({page: 1, title: "The Beginning"}));

alert(chapters.pluck('title'));
票数 133
EN

Stack Overflow用户

发布于 2011-05-01 12:20:13

‘s的集合比较器依赖于Underscore.js方法_.sortBy。sortBy的实现方式最终“包装”了javascript .sort(),这使得反向排序字符串变得很困难。对字符串进行简单的否定操作会返回NaN并破坏排序。

如果您需要对字符串执行反向排序,例如按字母顺序反向排序,这里有一种非常老套的方法:

comparator: function (Model) {
  var str = Model.get("name");
  str = str.toLowerCase();
  str = str.split("");
  str = _.map(str, function(letter) { 
    return String.fromCharCode(-(letter.charCodeAt(0)));
  });
  return str;
}

它一点也不漂亮,但它是一个“字符串负值器”。如果你对在javascript中修改原生对象类型没有任何顾虑,你可以通过提取字符串求反器并将其作为一个方法添加到String.Prototype中来使你的代码更清晰。然而,您可能只在知道自己在做什么的情况下才想这样做,因为在javascript中修改原生对象类型可能会产生不可预见的后果。

票数 46
EN

Stack Overflow用户

发布于 2011-09-06 03:15:00

我的解决方案是在排序后反转结果。

为了防止双重渲染,首先使用静默进行排序,然后触发“reset”。

collections.sort({silent:true})
collections.models = collections.models.reverse();
collections.trigger('reset', collections, {});
票数 29
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5013819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档