我正在努力将我的ember-data存储缓存到本地存储。在第一次加载时,我查询服务器将数据加载到存储中,然后将其加载到本地存储中。在后续页面加载中,我从localstorage中提取数据并将其加载到商店中。我可以使用pushMany方法执行此操作。
商店的pushMany
方法需要规范化数据。来自服务器的有效负载通过将其传递给模型序列化器来规范化。一旦归一化数据存储在商店中,似乎有理由相信应该可以将标准化数据拉出来。
那么如何将标准化数据从商店中拉出来?
每个型号都有_data
属性。 '_data'属性仅适用于平面模型。更复杂的模型_data
属性包含实例化关系。
我想避免不止一次序列化/反序列化。
This是我目前的实施方式。 toJson
方法的问题是它必须加载所有关联,包括尚未解析的异步关系。我认为关于ember数据如何解析关键主/外键存在一个基本问题。
答案 0 :(得分:2)
问题的一个很好的起点可能是从ember-data实施toJSON。
正如您所提到的,toJSON的问题在于它正在解析所有关联。对于belongsTo关系,通过使用_data获取相关对象的 id ,可以轻松避免此问题。
customToJSON: function(record) {
var json = {};
json.id = record.get('id');
var serializer = DS.JSONSerializer.create({ container: record.container });
record.eachAttribute(function(key, attribute) {
serializer.serializeAttribute(record, json, key, attribute);
}, this);
record.eachRelationship(function(key, relationship) {
if (relationship.kind === 'belongsTo') {
json[relationship.key] = record._data[relationship.key].id;
}
});
return json;
}