1

我有一个这样定义的 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>);
4

2 回答 2

5

如果您使用的是最新版本 (11) 的 ember-data,则加载数据会发生重大变化。

加载数据中

以前,store 的某些功能,例如 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']);
于 2013-02-15T22:24:50.007 回答
0

先前的答案已过时,但概念仍然相同。

我相信处理这个问题的正确方法是this.get('store').pushPayload({data: ...})

于 2016-12-15T20:09:49.897 回答