1

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

我一直在按照本教程处理身份验证,但我想使用 ember-data 而不是自定义 jQuery 请求。

我必须做的一件事是调用 API 来创建一个新会话,通过发送电子邮件和密码,然后 API 将返回一个 API Key 对象。

这是我的 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 已加载到某个地方,因为save()如果它们各自的 Ember 模型不存在但我不知道如何访问它们,我会收到错误消息。

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

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

编辑: 我试图在我的 API 上创建一个actuel Session 模型,导致这个 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"
    }
}

(注意根元素是 now session

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

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

我收到此错误,是否在 Ember Data 模型中声明了 Session 和 ApiKey 之间的关系...

4

1 回答 1

0

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

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

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

App.ApplicationAdapter = DS.ActiveModelAdapter.extend()
于 2013-11-06T08:58:58.763 回答