【发布时间】: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