使用比较器时,骨干收集是半排序的

时间:2014-01-21 18:53:26

标签: javascript sorting backbone.js backbone-model

我使用骨干的集合模型在骨干视图上显示字符串的排序列表。这是模型和比较器:

var MenuItems = Backbone.Collection.extend({
  comparator: function (a, b) {
    if (a.get('name') < b.get('name')) {
      return 1;
    } else if (b.get('name') > a.get('name')) {
      return -1;
    }
  },

  model: MenuItem,
  url: '/items'
});

运行代码时,只对列表中十二个项目中的前六个进行排序,其余项目仍未排序。使用comparator: 'name'时,列表已完全排序,但使用函数时会出现此问题。

任何人都知道为什么会发生这种情况?这可能是一个Backbone bug吗?我使用的是Backbone 1.1.0

1 个答案:

答案 0 :(得分:4)

这是一个有效的代码。

var MenuItems = Backbone.Collection.extend({
    comparator: function (a, b) {
        if (a.get('name') < b.get('name')) {
            return -1;
        } else if (a.get('name') > b.get('name')) {
            return 1;
        }
    }
});

这是jsfiddle with output,因此您可以比较http://jsfiddle.net/ek44Z/2/

主要问题在于功能内容。您需要在-1语句中返回if,并在a中比较belse if,然后返回1。基本上你的else if从未被调用过。

有一个好的编码。