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

Run*_*tle 3 backbone.js

我有一个基本的集合:

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

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

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

reorderByName: function(){
  myCollection.comparator = function(item){
    return item.get('name');
  });
  this.render();
})
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

Bil*_*uer 6

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

myCollection.sort();
Run Code Online (Sandbox Code Playgroud)

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

myCollection.sort({silent: true});
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.