我正在为iOS和Android构建一个 cordova 应用程序。因此,我使用Backbone with 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 调用中获取数据,创建一个模型,并将其添加到集合中,然后将模型“保存”到 Backbone.js localstorage中。
一切都很好。我可以在没有互联网的情况下稍后获取我的集合并使用本地数据。唯一不好的是,我的模型不会更新。因此它无法识别来自 AJAX 调用的数据是新的还是已经更改。如果我“添加”,它将添加一个全新的模型。因为Backbone.localStorage在保存的模型上使用它自己的idAttribute。因此,它不识别模型已经存在,并且它只应该更新模型。
我能做什么?是否有一种方法可以比较模型ID和localStorage ID。
这是我存储的数据的样子。它创建了一个“articles”对象,其中包含所有的ID。它还创建了每个articles对象的新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
1条答案
按热度按时间ldioqlga1#
您可以使用
集合集
set方法使用传递的模型列表对集合进行“智能”更新。如果列表中的模型还没有包含在集合中,则会添加该模型;如果模型已经在集合中,则其属性将被合并;如果集合中包含列表中没有的模型,它们将被删除。所有相应的“add”、“remove”和“change”事件都将被触发。返回集合中被触摸的模型。如果你想自定义行为,你可以用选项来禁用它:
{add: false}
、{remove: false}
或{merge: false}
中的一个或多个。