如何从JSON响应中自动序列化和加载Ember Data对象?

时间:2013-02-15 16:39:32

标签: ember.js ember-data

我有一个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>);

2 个答案:

答案 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: ...})