我有一个UserSession模型定义如下:
App.UserSession = DS.Model.extend({
authToken: attr('string'),
firstName: attr('string'),
lastName: attr('string')
});
当用户登录时,我正在向我的后端发出AJAX POST请求,该请求返回JSON表示,例如:
{
"user_session": {
"id": 1,
"auth_token": "token_here",
"first_name": "John",
"last_name": "Doe"
}
}
现在通常,如果我要执行以下操作,Ember Data将负责自动序列化JSON并添加对象:
App.UserSession.find(<session-id>);
当我正在进行手动AJAX调用时,是否有一种简单的方法可以将JSON返回到Ember数据存储对象中而无需手动反序列化?
为清晰起见编辑:
下面的不会有效,但我希望找到一些可以执行上述操作的功能,这些功能可能类似于下面的调用。
App.UserSession.load(<session-json>);
答案 0 :(得分:5)
如果您使用的是最新版本(11)的加载数据,则加载数据会发生重大变化。
正在加载数据
以前,商店的某些功能,例如load(),假定为 单适配器。
如果您想在没有应用程序的情况下从后端加载数据 要求它(例如,通过WebSockets流),使用它 API:
store.adapterForType(App.Person).load(store, App.Person, payload);
此API还将处理侧载和嵌入数据。我们打算补充一下 将来这个API的更方便的版本。
https://github.com/emberjs/data/blob/master/BREAKING_CHANGES.md#loading-data
您将要抓住商店的实例。如果你在控制器中,你可以这样做:
@get('store')
你也可以这样做:
App.__container__.lookup('store:main')
不建议使用内部API(由容器调用周围的__表示),但不保证不会更改。
获得商店实例后,您可以在UserSession中加载:
@get('store').adapterForType(App.UserSession).load(@get('store'), App.UserSession, sessionJson['user_session']);
答案 1 :(得分:0)
之前的答案已经过时,但概念仍然相同。
我认为处理此问题的正确方法是使用this.get('store').pushPayload({data: ...})