Backbone.js coleção comparador não a classificação por número de
-
21-12-2019 - |
Pergunta
Eu tenho uma coleção chamada de backbone users
, com cada user
tem um único name
e não exclusivo page
.Eu gostaria de classificar este users
coleção por página, mas a Espinha dorsal do comparator
está dando os mesmos resultados quando não comparator
é declarado.
Vamos dizer que eu tenho uma coleção de usuários assim (adicionados de um por um, de cima para baixo):
name: B, page: 1
name: D, page: 2
name: A, page: 3
name: C, page: 4
Se eu fizer
class Entities.Users extends Backbone.Collection
...
comparator: (u) ->
u.get("name").toUpperCase()
Em seguida, a classificação está como o esperado (por name
):
name: A, page: 3
name: B, page: 1
name: C, page: 4
name: D, page: 2
No entanto, se eu tentar a classificação por page
:
comparator: (u) ->
parseInt u.get("page")
Em seguida, a coleção não classificar corretamente (página 1 é sempre no final):
name: D, page: 2
name: A, page: 3
name: C, page: 4
name: B, page: 1
Por que isso acontece e como posso classificar corretamente por page
?
EDITAR
Isso também não funciona com o simples versão da cadeia de page
:
comparator: (u) ->
u.get("page")
Solução 2
Depois de muito cavar, parece que a coleção foi, na verdade, de ordenação, não era apenas fazer uma completa re-renderizar depois de cada novo fetch({remove: false})
.Eu adicionei um ouvinte para o CompositeView assim:
class MyClass extends Marionette.CompositeView
...
initialize: ->
@collection.on "sync", () => @render()
E ele está obedecendo o comparador de como esperado agora.Eu ainda não tenho idéia de por que isso foi não também um problema ao ordenar por name
embora.
Outras dicas
Você já tentou apenas isto :
comparator: "page"