我如何在Backbone.js应用程序中更改localStorage中的数据顺序?

时间:2012-05-01 01:11:36

标签: backbone.js local-storage

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

1 个答案:

答案 0 :(得分:3)

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

Local storage is

  

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

注意键/值对,这意味着你或多或少地处理一个大的哈希表,那些通常是无序的。此外,来自fine specification

  

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

因此本地存储中没有特定的顺序。如果您需要特定订单,则必须自行安排。

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

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值。