我有两个模型Recipe
和User
。我无法在配方中获取用户对象。我做错了什么?
App.Recipe.find(1).get('title') // Returns "recipe01 title". All works fine.
App.Recipe.find(1).get('user') // Returns null
user.js.coffee
App.User = DS.Model.extend
email: DS.attr('string')
recipes: DS.hasMany('App.Recipe')
recipe.js.coffee
App.Recipe = DS.Model.extend
user: DS.belongsTo('App.User')
title: DS.attr('string')
我的json数组
{
recipe: {
id: 1,
title: "recipe01",
user: {
id: 1,
name: "ejiqpep",
email: "ejiqpep@gmail.com",
}
}
}
答案 0 :(得分:3)
默认情况下,Ember Data希望通过键引用相关记录。然后你可以加载额外的记录,或者让Ember懒惰地从他们的API端点加载它们。
{
recipe: {
id: 1,
title: "recipe01",
user_id: 1
},
user: {
id: 1,
name: "ejiqpep",
email: "ejiqpep@gmail.com"
}
}
但是,您也可以指示适配器嵌入记录。
有两种类型的嵌入式记录加载embedded: 'always'
,其中Ember将接收和发送嵌入对象的任何更改。
App.Adapter.map 'App.Recipe',
user:
embedded: 'always'
或embedded:'load'
Ember将从JSON加载嵌入对象,但会将更改作为单独的对象保存回API。
App.Adapter.map 'App.Recipe',
user:
embedded: 'load'
您想要采取的三个选项中的哪一个取决于您。 嵌入式对象最近才实现,并且围绕它们存在一些问题(请参阅Github上的Ember-Data问题),但无需对现有服务器进行任何更改即可使用。