Backbone.js集合如何改变排序顺序?

6

一个backbone collection已经初始化后,我该如何更改其排序顺序?

我尝试了以下代码,但无效:

    collection.comparator = function () {
      // new function
    }
    collectionObject.sort()

在集合初始化时定义比较器不是一个选项吗?为什么不呢? - Matt Ball
请发布更多的代码。collectioncollectionObject 如何定义? - hyperslug
2个回答

3

我认为您没有正确定义比较器。如果您定义了比较器,对象将按正确顺序插入集合中。

这里是一个例子,您可以在加载了Backbone的网站上通过Firebug运行:

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

chapters.comparator = function(chapter) { 
  return chapter.get("page");
};

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

chapters.pluck('title');

# OUTPUT
# ["The Beginning", "The Middle", "The End"]

注意比较器返回每个章节页面属性中存储的值。Backbone的集合排序类似于使用字符串或整数的sortBy,不遵循传统的-1、0、1比较器方法。


您也可以将比较器设置为一个命名属性,例如 chapters.comparator = 'page'。http://backbonejs.org/#Collection-comparator - Joshua

2
如果您在正确的集合上调用sort,它应该可以工作:
collection.comparator = function (item) {
  return item.get('field');
};

collection.sort();

不需要调用排序函数 - Gabo Esquivel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接