2011-05-24 38 views
3

我有一个基本的集合:按日期排序是否可以为集合动态定义比较器函数?

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

不幸的是,这似乎并没有工作。有关我如何做到这一点的任何建议?

谢谢。

回答

6

看起来你只做了你需要做的一半。你已经将这个集合作为比较器,但是你没有告诉它自己。所以,你需要添加类似这种说法你渲染权利之前:

myCollection.sort(); 

注意,这将触发一个事件reset这将由你已经绑定此事件的任何对象接收。如果你想抑制触发该事件,你可以这样拨打电话:

myCollection.sort({silent: true}); 

希望这会有所帮助。

+0

是的,由于某种原因,我错过了“排序”的文档...感谢您的帮助 – 2011-05-25 07:08:57

0

我在找比较器的自己的问题的解决方案时发现了这个问题。我想我会补充一下,以防其他人发现这个问题,如果你的集合中的模型有你的比较器正在排序的属性的未定义值,那么排序不会发生。如果不需要,请务必在模型上使用默认设置,然后按照时间排序。 ;)