我有一个名为users
的主干集合,每个user
都有一个唯一的name
和非唯一的page
。我希望按页面对此users
集合进行排序,但Backbone的comparator
提供与未声明comparator
时相同的结果。
假设我有一组像这样的用户(逐个添加,从上到下):
name: B, page: 1
name: D, page: 2
name: A, page: 3
name: C, page: 4
如果我这样做
class Entities.Users extends Backbone.Collection
...
comparator: (u) ->
u.get("name").toUpperCase()
然后排序符合预期(name
):
name: A, page: 3
name: B, page: 1
name: C, page: 4
name: D, page: 2
但是,如果我尝试按page
排序:
comparator: (u) ->
parseInt u.get("page")
然后集合没有正确排序(第1页总是在最后):
name: D, page: 2
name: A, page: 3
name: C, page: 4
name: B, page: 1
为什么会发生这种情况,如何按page
正确排序?
修改
这也不适用于page
的纯字符串版本:
comparator: (u) ->
u.get("page")
答案 0 :(得分:0)
你有没有尝试过这个:
comparator: "page"
答案 1 :(得分:0)
经过多次挖掘后,看起来该集合实际上正在排序,它只是在每个新fetch({remove: false})
之后没有进行完全重新渲染。我像这样在CompositeView中添加了一个监听器:
class MyClass extends Marionette.CompositeView
...
initialize: ->
@collection.on "sync", () => @render()
现在正如预期的那样服从比较器。我仍然不知道为什么在按name
排序时不也是一个问题。