Ember.js 如何从余烬数据存储中提取规范化数据?

Ember.js 如何从余烬数据存储中提取规范化数据?,ember.js,ember-data,Ember.js,Ember Data,我正在将余烬数据存储缓存到本地存储。在第一次加载时,我查询服务器,将数据加载到存储中,然后加载到本地存储中。在随后的页面加载中,我从localstorage中提取数据并将其加载到存储中。我可以用这个方法来做这件事 商店的pushMany方法需要标准化数据。来自服务器的负载通过模型序列化器进行规范化。一旦规范化数据在存储中,就有理由相信应该可以将规范化数据取出 那么如何从存储中提取规范化数据呢? 每个模型上都有一个\u data属性。“_data”属性仅适用于平面模型。更复杂的模型\u data属

我正在将余烬数据存储缓存到本地存储。在第一次加载时,我查询服务器,将数据加载到存储中,然后加载到本地存储中。在随后的页面加载中,我从localstorage中提取数据并将其加载到存储中。我可以用这个方法来做这件事

商店的
pushMany
方法需要标准化数据。来自服务器的负载通过模型序列化器进行规范化。一旦规范化数据在存储中,就有理由相信应该可以将规范化数据取出

那么如何从存储中提取规范化数据呢?

每个模型上都有一个
\u data
属性。“_data”属性仅适用于平面模型。更复杂的模型
\u data
属性包含实例化的关系

我希望避免多次序列化/反序列化


这是我当前的实现。
toJson
方法的问题是它必须加载所有关联,包括尚未解决的异步关系。我认为,关于余烬数据如何解析关系主键/外键,存在一个基本问题

解决您的问题的一个很好的起点可能是从余烬数据实现

正如您所提到的,toJSON的问题在于它正在解析所有关联。对于belongsTo关系,通过使用_数据获取相关对象的id,很容易避免此问题

customToJSON:函数(记录){
var json={};
json.id=record.get('id');
var serializer=DS.JSONSerializer.create({container:record.container});
record.eachAttribute(函数(键、属性){
serializer.serializeAttribute(记录、json、键、属性);
},这个);
记录每个关系(功能(键、关系){
if(relationship.kind==='belongsTo'){
json[relationship.key]=record.\u数据[relationship.key].id;
}
});
返回json;

}
我不知道这是否是您的意思,但您可以通过使用all-via从存储中获取记录,而无需请求服务器“要获取已加载到存储中的记录列表,而无需再次进行网络请求,请使用all。”
var posts=this.store.all('post')/=>无网络请求此要点适用于没有关系的模型。在我看来,模型上应该有一种提取原始标准化数据的方法。是的,我认为解决方案不可能那么简单……到今天为止,我认为这个问题没有一个好的答案。余烬数据团队正在进行这项工作。这个快照api看起来很有前途。谢谢你的回答,我会把赏金给你的。