2014-02-26 19 views
0

我有一個骨幹收集叫做users,每個user有一個獨特的name和非唯一的page。我想按頁面排列這個users集合,但Backbone的comparator給出了與沒有聲明comparator時相同的結果。Backbone.js收集比較沒有按編號排序

比方說,我有一個用戶喜歡收藏等等(逐一添加,從上到下):

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

多挖後,看起來像集合實際上是排序,它只是沒有做完全重新渲染後,每個新的fetch({remove: false})。我向複合視圖添加了一個監聽器,如下所示:

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

而且它現在正在按照預期比較比較結果。我仍然不知道爲什麼這是而不是雖然排序name也是一個問題。

+0

你是否按順序按名稱添加模型? –

+0

不,並且事實上它們是按順序添加的「頁面」! – tyler

+0

有趣......聽起來像是幕後可能發生的事情 –

0

你試過只有這個:

comparator: "page" 
+0

我有,不幸的是,它不會改變任何東西 – tyler