【发布时间】:2013-06-10 09:26:40
【问题描述】:
我正在使用主干本地存储并遇到一些奇怪的行为。
我有一个定义、实例化和获取的模型和集合:
MyModel = Backbone.Model.extend({
localStorage: new LocalStore('example-myModels')
//note: LocalStore = Backbone.LocalStore -> https://github.com/jeromegn/Backbone.localStorage
});
MyCollection = Backbone.Collection.extend({
model : MyModel,
localStorage: new LocalStore('example-myModels')
});
var myCollection = new MyCollection();
myCollection.fetch(...);
然后,此集合将作为列表显示给用户。用户可以向集合中“添加”一个项目,最终生成以下代码:
var newModel = new MyModel();
newModel.save(newModelAttributes, {
success: function(newlySavedModel) {
myCollection.add(newlySavedModel);
}
);
此时 myCollection 有了新添加的模型,我可以在我的 localStorage 数据库中看到成功创建的记录:
预存本地存储:
保存后的本地存储:
用户添加记录后的下一步是返回列表,此时再次获取集合:
myCollection.fetch();
现在 myCollection 不再包含新记录。无论我获取多少次,都不会检索到新记录——即使我可以在我的 localStorage 数据库中看到它。我也尝试过创建 Collection 的新实例并获取它,但它会产生相同的结果。如果我重新加载浏览器,新记录会按预期显示。有人知道发生了什么吗?我觉得我在这里缺少一些基本的东西......
可在此处找到重现该问题的运行示例:http://jsbin.com/iyorax/2/edit(确保控制台可见并单击“使用 JS 运行”)
提前致谢!
【问题讨论】:
-
如果你调用
myCollection.fetch({reset: true});,新记录是否存在? -
“reset: true”不走运 :(
-
这种情况发生在 Js fiddle 中吗?可能有助于复制和诊断
-
感谢您的建议。我在问题中添加了指向 jsbin 的链接,它确实重现了该问题(至少在 Chrome 和 Firefox 中)。
标签: javascript backbone.js local-storage