Javascript Backbone.js比较器未排序(Coffeescript)
我正在尝试使用Coffeescript在Backbone.js中按字母顺序对集合进行排序。集合是我要显示的表中的前5个对象Javascript Backbone.js比较器未排序(Coffeescript),javascript,sorting,backbone.js,coffeescript,Javascript,Sorting,Backbone.js,Coffeescript,我正在尝试使用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: previe
preview = new Collections.Bananas(@model.get('bananas').slice(0,5))
preview.comparator = (banana) -> banana.get("name")
bananas = new BundleOfBananas.Bananas({collection: preview})
所有的对象都在显示,我得到了正确的数据,只是没有按字母顺序排列。有人能帮我解决Backbone.js比较器的问题吗?谢谢 当发生以下两种情况之一时,主干集合会自行排序:
比较器
preview = new Collections.Bananas(@model.get('bananas').slice(0,5))
据推测,集合上没有定义比较器
,因此不进行排序。然后分配比较器
属性:
preview.comparator = (banana) -> banana.get("name")
class Collections.Bananas extends Backbone.Collection
comparator: 'name'
# as you have now...
但不要调用preview.sort()
命令集合自行排序
您有两个基本选项:
比较器
功能作为集合定义的一部分:
class Collections.Bananas extends Backbone.Collection
comparator: (banana) -> banana.get('name')
# as you have now...
或者只使用属性,因为您是按模型属性排序的:
preview.comparator = (banana) -> banana.get("name")
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])
preview = new Collections.Bananas(@model.get('bananas')[0..4])
preview.comparator = 'name'
preview.sort()
这太棒了,非常感谢!创建我定义集合的comparator函数非常有效。非常感谢!实际上我还有一个问题。假设我总是希望一个香蕉(数据库中的主香蕉。它有一个is_primary属性)显示在顶部,而不管它的字母位置如何。如何实现这一点?您必须使用一个双参数
比较器
函数,如果您的比较器是(a,b)->…
,那么它的行为类似于数组.prototype.sort
比较器函数。