1

我现在正在制作一个 Backbone 应用程序并使用一个backbone.localstorage 插件来保存数据。我的应用程序有一些可排序的项目,所以我希望每次对项目进行排序时,localStorage 中的数据顺序也会发生变化。并且下次我刷新整个页面时,页面将由排序后的数据呈现。但似乎主干.localstorage 将按其创建顺序保存数据。有人可以给我一些想法吗?

4

1 回答 1

3

如果您希望您的模型以明确的顺序出现,则comparator在您的集合中包含 a ,并且可能在每个模型中包含一个位置编号。

本地存储是

一种可以安全地存储字符串键/值对并在以后检索以供使用的方法。

请注意键/值对,这意味着您正在处理或多或少的大哈希表,而这些哈希表通常是无序的。此外,从精细规范

键的顺序是用户代理定义的,但必须在对象内保持一致,只要键的数量不变。(因此,添加或删除键可能会更改键的顺序,但不能仅更改现有键的值。)

因此本地存储内部没有特定的顺序。如果你想要一个特定的订单,你必须自己安排。

在您的情况下,您的模型中可能有一个positionorindex属性,其行为类似于数组索引;然后,在您的收藏中:

comparator: function(m) { return m.get('position') } // or 'index'

您还可以使用两个参数comparator函数:

comparator: function(a, b) {
    a = a.get('position');
    b = b.get('position');
    if(a < b)
        return -1;
    else if(a > b)
        return 1;
    return 0;
}

当您移动模型时,您必须维护位置索引,但这应该不是非常困难。您还可以在将数据position从本地存储中拉出之后但在将其放入您的集合之前对数据进行排序,然后position在将模型写入本地存储时分配值。

于 2012-05-01T01:49:52.663 回答