代码之家  ›  专栏  ›  技术社区  ›  Tyler

Backbone.js集合比较器未按数字排序

  •  0
  • Tyler  · 技术社区  · 10 年前

    我有一个主干集合叫做 users ,每个 user 拥有独一无二的 name 和非唯一 page 。我想把这个分类 用户 按页收集,但Backbone的 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: A, page: 3
    name: B, page: 1
    name: C, page: 4
    name: D, page: 2
    

    但是,如果我尝试按 :

    comparator: (u) ->
      parseInt u.get("page")
    

    然后集合无法正确排序(第1页始终在末尾):

    name: D, page: 2
    name: A, page: 3
    name: C, page: 4
    name: B, page: 1
    

    为什么会发生这种情况,我该如何正确排序 ?

    编辑

    这也不适用于纯字符串版本的 :

    comparator: (u) ->
      u.get("page")
    
    2 回复  |  直到 10 年前
        1
  •  0
  •   Rida BENHAMMANE    10 年前

    你只尝试过这个吗:

    comparator: "page"
    
        2
  •  0
  •   Tyler    10 年前

    经过大量挖掘后,看起来该集合实际上是在排序,只是在每个新集合之后没有进行完整的重新渲染 fetch({remove: false}) 。我向CompositeView添加了一个侦听器,如下所示:

    class MyClass extends Marionette.CompositeView
      ...
      initialize: ->
        @collection.on "sync", () => @render()
    

    它现在正按照预期遵守比较器。我仍然不知道为什么 排序依据时也存在问题 name 虽然