5

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

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

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 运行”)

提前致谢!

4

3 回答 3

4

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

于 2013-06-14T17:51:24.923 回答
1

我有一个使用 Backbone.localstorage 的应用程序,对我有用的是我首先将模型添加到集合中,然后调用 save 到模型中。像这样。

var newModel = new MyModel();
myCollection.add(newModel)
newModel.save();

我不是 100% 确定,但我的理由是,您的模型已保存,但您的集合未保存,并且可能没有更新索引,并且在您调用 fetch 时,您正在获取未更新的集合。

希望有帮助。

于 2013-06-13T21:44:22.207 回答
0

我能想到的唯一原因是模型不存在于集合中是因为重复的 ID

我没有看到模型上定义的 IdAttribute。有时这可能是个问题。

于 2013-06-13T22:31:10.203 回答