重置主干集合的“插入排序顺序”

时间:2013-04-02 00:31:18

标签: javascript backbone.js

我在运行时在我的主干集合上设置和取消设置比较器函数,我想知道是否有办法将集合“重置”到其原始的插入顺序。例如......

var Mod = Backbone.Model.extend({});
var Col = Backbone.Collection.extend({ model: Mod });
var col = new Col([
    { name: "andy" },
    { name: "chad" },
    { name: "ashley" },
    { name: "louis" }
]);

col.comparator = function(p1, p2) {
    return p1.get('name') < p2.get('name') ? -1
        : (p1.get('name') > p2.get('name') ? 1 : 0 );
}
col.sort();

col.comparator = false;

// throws, was hoping this would return 
// the collection to insertion order
col.sort();

请忽略我在此处设置的比较器功能可以用sortBy实现替换的事实。这只是一个人为的例子。从Backbone源我可以清楚地看到,如果你尝试对没有比较器的集合进行排序,它会抛出:

// ... from BB source ...
sort: function(options) {
    if (!this.comparator) throw new Error('Cannot sort a set without a comparator');
    // ...

有没有办法将集合的顺序返回到插入顺序?

2 个答案:

答案 0 :(得分:0)

您可以将原件保存在Collection中。类似的东西:

col.originalComp = col.comparator;
col.comparator = function(){};
...Do Stuff ...
col.comparator = col.originalComp; //Back to original

答案 1 :(得分:0)

不,没有。虽然您可以轻松地保留一些数据,以便以后保留此信息。重新定义add方法,'hack'解析一个...
但是,可悲的是,拥有一个没有任何意义。