我是一个新手javascript开发人员(这里的第一篇文章!)并且最近尝试使用backbone.sync。我一直在阅读todo示例,并注意到它使用了backbone-localstorage。我的感觉是,backbone-localstorage只是作者用于演示目的的快速实现。我还注意到键是随机生成的,而我想要的东西可以让我命名我自己的键值。
我一直在关注jstorage(www.jstorage.info),并且非常感谢如何将它与backbone.js集成的一些指针(最好是代码示例)。我想像
或者,您会推荐什么localStorage插件/包装器,以及它如何与骨干网集成?
提前感谢您的帮助。
答案 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作为底层存储机制进行交换。在这里看到: