我正在尝试使用 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 比较器吗?谢谢!
最佳答案
当发生以下两种情况之一时,Backbone 集合会自行排序:
- 您添加了一些模型并得到了
comparator
已定义。 - 您手动调用
sort
在集合上并定义一个比较器
。
当您添加模型时:
preview = new Collections.Bananas(@model.get('bananas').slice(0,5))
据推测,集合上没有定义比较器
,因此不会进行排序。然后分配 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])
这将为您提供一个自动排序的集合。如果您想像现在一样手动分配
比较器
,那么: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()
关于javascript - Backbone.js 比较器未排序(Coffeescript),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21766742/