2013-02-23 85 views
0

我在計算如何對包含鏈接項目的BackboneJS集合進行排序時遇到了一些問題。 是否有效地做到這一點? (我正在考慮讓一個返回前一個元素的數量,但這確實效率很低)BackboneJS:對鏈接項目的集合進行排序

比較器應該是什麼? - 是一個雙鏈表需要?

我的項目看起來像

[ { ID:1, 名稱: '名', previousItem:2 }, { ID:2, 名稱: '英文別名', previousItem :空 } ]

+0

我不知道我理解你的問題。我認爲Backbone Collection已經具有排序功能。也許發佈一些相關的代碼片段,以便我們可以看到你的實現現在看起來像什麼。 – Gohn67 2013-02-23 23:21:43

+0

它具有排序功能,但它需要一個簡單的屬性才能進行正確的排序,如按字母順序排序。 – 2013-02-23 23:27:35

+0

爲什麼你需要知道以前的項目是什麼?如果你有這個集合,你應該可以很容易地找到它,而不需要參考。我想你有案例,你只有模型?你可以做的一件事是先排序並通過簡單的迭代重新鏈接它們。這將是一個額外的O(n)思想。 – Gohn67 2013-02-23 23:32:38

回答

1

這裏是構建集合的基本代碼。我假設你在這裏使用骨幹模型。在循環中,您需要將模型添加到集合的前面(不轉移),因爲您只知道前一個項目。

這裏的關鍵是知道最後的項目是什麼。如果你不知道,那麼這是行不通的。

model = frontItem; 
while (model != null) { 
    collection.unshift(model); 
    model = model.attr('previousItem')  
} 
0

有關於這對github的討論,還可以使用comparator,如果你想使用comparator需要強調

var PhotoCollection = Backbone.Collection.extend({ 
    model: Photo, 
    comparator: function(item) { 
     return item.get('pid'); 
    } 
}); 
+0

這需要一個直接的屬性來排序,我沒有。 在我的情況下,我只提到了應該放在另一個前面的項目。 示例數據可能是 [{id:1,name:'name',previousItem:2},{id:2,name:'othername',previousItem:null},{id:3,name:'third', previousItem:1}] 這些的正確分類將是 id#2,id#1,id#3 – 2013-02-23 23:30:35