【问题标题】:Backbone localStorage not updating model骨干localStorage不更新模型
【发布时间】:2018-09-06 20:12:46
【问题描述】:

我正在为 iOS 和 Android 构建一个 Cordova 应用程序。因此,我使用 Backbone 和 Backbone.LocalStorage 将我的数据存储在设备上。

我的收藏和模型如下所示

App.collections.Articles = Backbone.Collection.extend({
    model: App.models.Article,
    localStorage: new Backbone.LocalStorage("articles"),
});

App.models.Article = Backbone.Model.extend({
    defaults:{
        read: false,
    },
});

我有一个 ajax 调用来从 drupal 系统获取我的数据。获得数据后,我使用这个小代码将其保存到集合中。

    App.data.Articles = new App.collections.Articles();  

    $.each(data.articles, function(i,obj) {
        var model = App.data.Articles.add(obj);
        model.set({read: true});
        model.save();
    });

所以我从 ajax 调用中获取数据并创建一个模型,并将其添加到我的集合中。之后,我将模型“保存”到主干本地存储中。

一切正常。当没有互联网可用时,我可以稍后获取我的收藏并使用本地数据。 唯一不起作用的是,我的模型不会更新。所以它不会识别出来自 ajax 调用的数据是新的或已更改的。如果我“添加”,它将添加一个全新的模型。因为 Backbone.localStorage 在保存的模型上使用它自己的 idAttribute 。所以它不承认模型已经存在并且它只应该更新模型。

我能做什么?有没有办法比较模型 id 和 localStorage id。

这就是我存储的数据的样子。 它创建一个具有所有 ID 的“文章”对象。它通过它的新 ID 创建每个文章对象。

articles: cfbc6a16-c3c4-cb1b-6667-fb1ecf00717f,da65ce5a-dbbb-d8ca-4117-50d0a0fa3bf4,f2af3c83-bd3c-de87-7953-d992348c46cc,9a3ca688-0ba9-ee87-4fb3-878d1eca46bc,f1f9e082-c1ff-5d6b-9c13-54ddd3a12158

articles-9a3ca688-0ba9-ee87-4fb3-878d1eca46bc

【问题讨论】:

  • 您应该从本地集合中获取每个模型,并使用后端的 id,如果存在,只需手动更新它model.set(obj)

标签: cordova backbone.js collections model


【解决方案1】:

你可能会使用

Collection.set

set 方法使用传递的模型列表对集合执行“智能”更新。如果列表中的模型尚未在集合中,它将被添加;如果模型已经在集合中,它的属性将被合并;如果集合包含列表中不存在的任何模型,它们将被删除。发生这种情况时,所有适当的“添加”、“删除”和“更改”事件都会被触发。返回集合中被触摸的模型。如果您想自定义行为,可以使用以下选项禁用它:{add: false}{remove: false}{merge: false}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-31
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多