我有一个“资产”主干模型,它有一个名为“selected”的自定义属性。从某种意义上说,它不是服务器端对象的一部分,因此它是自定义的。我用来表示用户当前选择了哪些资产列表。
var Asset = Backbone.Model.extend({
defaults: {
selected: false
},
idAttribute: "AssetId"
});
这个模型是我定期获取的主干集合的一部分,以从服务器获取任何更改。
我遇到的问题是,每次我获取集合时,集合都会进行重置(我可以通过侦听重置事件来判断),因此选定属性的值会被来自 ajax 的数据清除要求。
骨干.js 文档似乎暗示有一个智能合并可以解决这个问题。我相信我在我的 fetch 方法中这样做
allAssets.fetch({ update: true ,cache: false});
而且我还在模型中设置了“idAttribute”字段,这样进来的对象的id就可以和集合中的对象进行比较了。
我解决这个问题的方法是在我的集合对象中编写我自己的 Parse 方法
parse: function (response) {
// ensure that the value of the "selected" for any of the models
// is persisted into the model in the new collection
this.each(function(ass) {
if (ass.get("selected")) {
var newSelectedAsset = _.find(response, function(num) { return num.AssetId == ass.get("AssetId"); });
newSelectedAsset.selected = true;
}
});
return response;
}
有一个更好的方法吗?