是否可以为集合动态定义比较器功能?

问题描述

| 我有一个基本的收藏:
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();
})
不幸的是,这似乎不起作用。关于我该如何做的任何建议? 谢谢。     

解决方法

看来您只完成了所需要做的一半。您已经为集合提供了比较器,但是您尚未告诉它求助于自己。因此,您需要在渲染之前添加类似以下语句的内容:
myCollection.sort();
请注意,这将触发一个
reset
事件,该事件绑定到的任何对象都将接收该事件。如果您希望抑制触发该事件,则可以通过以下方式进行调用:
myCollection.sort({silent: true});
希望这可以帮助。     ,我在寻找自己的比较器问题的解决方案时发现了这一点。我想我想补充一下,以防其他人发现此问题,如果您的集合中的模型具有用于比较器排序的属性的未定义值,则排序不会发生。如果不需要默认值,请确保在模型上使用默认值,并且按照“ \ em”排序。 ;)