javascript - 获取后新保存的 Backbone 模型未出现在集合中

标签 javascript backbone.js local-storage

我正在使用 Backbone 本地存储并遇到一些奇怪的行为。

我有一个定义、实例化和获取的模型和集合:

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 数据库中看到成功创建的记录:

预存 LocalStorage:

enter image description here

后保存本地存储:

enter image description here

用户添加记录后的下一步是返回列表,此时再次获取集合:

myCollection.fetch();

现在 myCollection 不再包含新记录。无论我提取多少次,新记录都不会被检索到——即使我可以在我的 localStorage 数据库中看到它。我也试过创建一个新的 Collection 实例并获取它,但它产生了相同的结果。如果我重新加载浏览器,新记录会按预期出现。任何人都知道发生了什么事?我觉得我在这里缺少一些基本的东西......

此处提供重现该问题的运行示例:http://jsbin.com/iyorax/2/edit (确保控制台可见,然后单击“使用 JS 运行”)

提前致谢!

最佳答案

您的模型和您的集合需要共享对同一 LocalStore 实例的引用,而现在您正在创建两个不同的对象。要解决此问题,请在模型或集合之外创建 LocalStore 对象,并在模型和集合的构造函数中传递对它的引用。

关于javascript - 获取后新保存的 Backbone 模型未出现在集合中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17096469/

相关文章:

javascript - 谷歌云端硬盘 HTTP 403 “Access Not Configured” 错误

javascript - Backbone.js 设置导致集合中的模型再次成为 "initialize"

javascript - Backbone model.save 在状态代码 200 上调用错误函数

javascript - 主干模型 : empty attribute with get method but in attributes object

javascript - Cordova - 如何从本地存储保存和读取 JSON 对象

ruby - 加载路线 : TypeError: undefined is not a function 时出错

javascript - 谷歌地图自定义标记设置默认图标

javascript - 如何避免点击浏览器后退按钮后返回?

javascript - Vue图像src文件路径不起作用

javascript - 如何检查 localStorage 中值的重复