如何将backbone.sync与jstorage集成?

时间:2011-05-27 20:13:18

标签: javascript backbone.js

我是一个新手javascript开发人员(这里的第一篇文章!)并且最近尝试使用backbone.sync。我一直在阅读todo示例,并注意到它使用了backbone-localstorage。我的感觉是,backbone-localstorage只是作者用于演示目的的快速实现。我还注意到键是随机生成的,而我想要的东西可以让我命名我自己的键值。

我一直在关注jstorage(www.jstorage.info),并且非常感谢如何将它与backbone.js集成的一些指针(最好是代码示例)。我想像 backbone.sync 需要以某种方式覆盖,就像在backbone-localstorage中一样。

或者,您会推荐什么localStorage插件/包装器,以及它如何与骨干网集成?

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

  

我的感觉是,骨干本地存储只是作者用于演示目的的快速实现。

完全正确。我会说大多数事情的实现都很好,但是你可以得到的支持可能是最小的。

  

我还注意到键是随机生成的,而我想要的东西可以让我命名我自己的键值。

这不是真的正确。我假设你指的是这个:

// Add a model, giving it a (hopefully)-unique GUID, if it doesn't already
// have an id of it's own.
create: function(model) {
    if (!model.id) model.id = model.attributes.id = guid();
    this.data[model.id] = model;
   this.save();
   return model;
}

这里发生的事情是,当在模型上调用创建时,它会尝试确定是否已在模型上设置id,如果未提供此类id,则guid函数用于构建一个。这不是随机设置密钥,它满足了每个保存的模型都应该具有id的要求(通过指定随机密钥)。

修改backbone-localstorage.js代码应该相当简单。让我们以商店构造函数为例

Before:
var Store = function(name) {
    this.name = name;
    var store = localStorage.getItem(this.name);
    this.data = (store && JSON.parse(store)) || {};
};

我们唯一需要更新的是调用localStorage:

After:
var Store = function(name) {
    this.name = name;
    //Notice here, that jStorage gives us the option to define a default.
    var store = $.jStorage.get(this.name, {}); 
    this.data = store;
};

同样简单的是保存功能:

Before:
save: function() {
    localStorage.setItem(this.name, JSON.stringify(this.data));
}

再次,只需更新对localStorage的调用:

After:
save: function() {
    $.jStorage.set(this.name, this.data);
}

更新:jStorage为您处理所有JSON.stringify和JSON.parse,所以我更新了上面的代码以反映这一点。

容易腻,对吧!

无论如何,这是一个很棒的练习,祝你好运。我希望我能够帮助你。

P.S。关于localStorage插件困扰我的一件事是它使用model.attributes.xxx,最好使用model.get("xxx")。这样,如果他们改变模型更改的内部,你的代码就不会破坏。

P.p.s。至于如何生成guids,天气随机guid适合你,取决于你的域名。使用TODO示例,没有要与之同步的后备数据库,因此任何旧的guid都可以解决问题,但在许多其他情况下,您可能正在使用html5存储来创建应用程序的离线版本,因此id需要兼容与数据库。在这些情况下,使用随机guid可能不是一个好主意,但是backbone-localstorage插件提供的设计是为了使它不可能与你的db的实际id冲突,所以它不是_ 那个坏。这里没有正确的答案,所以对你的域名有意义。

答案 1 :(得分:0)

您应该首先查看backbone.js提供的本地存储插件。有很多代码示例可以让您了解如何将jstorage作为底层存储机制进行交换。在这里看到:

backbone-localstorage.js