如何使用Ember Data获取保存的返回数据?

时间:2013-10-28 13:34:52

标签: ember.js ember-data

我正在使用带有ember-data的Ember.js为自制API制作GUI。

我一直在关注此tutorial来处理身份验证,但我想使用ember-data而不是自定义jQuery请求。

我要做的一件事就是通过发送电子邮件和密码来调用API来创建一个新会话,然后API会将API发回给我。

这是我的LoginController处理loginUser操作(它是CoffeeScript):

App.LoginController = Ember.ObjectController.extend
  actions:
    loginUser: ->
      session = @store.createRecord 'session',
        email:    @get 'email'
        password: @get 'password'
      session.save()

以下是创建会话时得到的结果:

{
    "users": [
        {
            "id": "525fa0286c696c0b14040000",
            "email": "john.doe@mydomain.com",
            "first_name": "John",
            "surname": "Doe"
        }
    ],
    "api_key": {
        "id": "526e464c6c696c07d2000000",
        "type": "session",
        "key": "6b824d6a-a065-4b6f-bb28-5c19389760f8",
        "expires_at": "2013-10-28T11:41:08+00:00",
        "user_id": "525fa0286c696c0b14040000"
    }
}

我有Session,ApiKey和User模型。我可以创建会话,但我不明白的是如何访问save()方法的返回值。

我知道我的ApiKey和User被加载到某处,因为如果他们各自的Ember模型不存在但我不知道如何访问它们,我会在save()之后收到错误。

我尝试使用save()then()事件等didCreate回调,但缺少有关传递给这些回调的参数以及如何使用它们的文档。

  • Ember.js 1.1.2
  • Ember数据 1.0.0.beta.3

修改 我试图在我的API上创建一个实体会话模型,产生这个JSON输出:

{
    "api_keys": [
        {
            "id": "526f69526c696c07d2110000",
            "type": "session",
            "key": "4c26af37-2b21-49c2-aef5-5850a396da0b",
            "expires_at": "2013-10-29T08:22:50+00:00",
            "user_id": "525fa0286c696c0b14040000"
        }
    ],
    "users": [
        {
            "id": "525fa0286c696c0b14040000",
            "email": "john.doe@coreye.fr",
            "first_name": "John",
            "surname": "Doe"
        }
    ],
    "session": {
        "id": "526f6e666c696c18c0010000",
        "api_key_id": "526f69526c696c07d2110000"
    }
}

(注意根元素现在是session

它不能更好地工作,因为现在我的保存操作导致以下错误(不在控制台中,then指向错误回调):

Object function () { [...] } has no method 'eachTransformedAttribute'

我收到此错误,会话和ApiKey之间的关系是在Ember Data模型中宣布的......

1 个答案:

答案 0 :(得分:0)

您的第二个示例JSON看起来更好:因为您正在保存会话,我希望响应中的会话节点和其他模型可以侧载。您可以使用promise回调保存后保存的会话:

session.save().then (savedSession) =>
  console.log savedSession.api_key.key

由于您的JSON中有_id个关系密钥,我假设您使用的是ActiveModel适配器及其默认序列化程序:

App.ApplicationAdapter = DS.ActiveModelAdapter.extend()