2013-02-23 87 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