我正在使用带有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
回调,但缺少有关传递给这些回调的参数以及如何使用它们的文档。
修改 我试图在我的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模型中宣布的......
答案 0 :(得分:0)
您的第二个示例JSON看起来更好:因为您正在保存会话,我希望响应中的会话节点和其他模型可以侧载。您可以使用promise回调保存后保存的会话:
session.save().then (savedSession) =>
console.log savedSession.api_key.key
由于您的JSON中有_id
个关系密钥,我假设您使用的是ActiveModel适配器及其默认序列化程序:
App.ApplicationAdapter = DS.ActiveModelAdapter.extend()