是否可以为集合动态定义比较器函数?

时间:2011-05-24 21:46:33

标签: backbone.js

我有一个基本的收藏品:

myCollection = Backbone.Collection.extend({
  model: myModel
  url: '/theurl',
  initialize: function(){
    this.fetch();
  })
})

初始化时,集合接收按日期排序的项目。 我希望能够使用另一个模型属性(名称,评级等)动态地重新排序集合。

在与集合相关联的视图中,我尝试将click事件绑定到这样的回调:

reorderByName: function(){
  myCollection.comparator = function(item){
    return item.get('name');
  });
  this.render();
})

不幸的是,这似乎不起作用。有关如何做到这一点的任何建议吗?

感谢。

2 个答案:

答案 0 :(得分:6)

看起来你只做了一半你需要做的事情。你已经给它收集了它的比较器,但是你没有告诉它要求它自己。因此,您需要在呈现之前添加类似此语句的内容:

myCollection.sort();

请注意,这将触发reset事件,该事件将被您绑定此事件的任何对象接收。如果您希望禁止触发该事件,您可以通过这种方式拨打电话:

myCollection.sort({silent: true});

希望这有帮助。

答案 1 :(得分:0)

我在寻找比较器问题的解决方案时发现了这一点。我想如果其他人发现这个问题,我会补充说,如果你的集合中的模型对比较器排序的属性有未定义的值,那么排序就不会发生。如果不需要,请确保在模型上使用默认值,并且您将按照它们排序。 ;)