我正在尝试使用Coffeescript在Backbone.js中按字母顺序对集合进行排序。该集合是我想要显示的表中的前5个对象。
preview = new Collections.Bananas(@model.get('bananas').slice(0,5))
preview.comparator = (banana) -> banana.get("name")
bananas = new BundleOfBananas.Bananas({collection: preview})
对象都在显示,我正在获取正确的数据,它不是按字母顺序排列的。谁能帮助我使用Backbone.js比较器?谢谢!
答案 0 :(得分:3)
当发生以下两种情况之一时,Backbone集合会自行排序:
comparator
。sort
并定义了comparator
。添加模型时:
preview = new Collections.Bananas(@model.get('bananas').slice(0,5))
据推测,集合上没有定义comparator
,因此没有进行排序。然后分配comparator
属性:
preview.comparator = (banana) -> banana.get("name")
但请勿致电preview.sort()
告诉收藏品自行排序。
您有两个基本选项:
在添加任何内容之前定义比较器。您可以将comparator
函数作为集合定义的一部分:
class Collections.Bananas extends Backbone.Collection
comparator: (banana) -> banana.get('name')
# as you have now...
或者只是使用属性,因为您要按模型属性进行排序:
class Collections.Bananas extends Backbone.Collection
comparator: 'name'
# as you have now...
然后实例化您的收藏:
new Collections.Bananas(@model.get('bananas')[0..4])
这将为您提供自动排序的集合。如果您想现在手动分配comparator
,那么:
preview = new Collections.Bananas
preview.comparator = 'name'
preview.reset(@model.get('bananas')[0..4])
手动拨打sort
:
preview = new Collections.Bananas(@model.get('bananas')[0..4])
preview.comparator = 'name'
preview.sort()