2

我有两个模型RecipeUser. 我无法在配方中获取用户对象。我究竟做错了什么?

App.Recipe.find(1).get('title') // Returns "recipe01 title". All works fine.

App.Recipe.find(1).get('user') // Returns null

用户.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",
    }
  }
}
4

1 回答 1

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 问题),但无需对现有服务器进行任何更改即可工作。

于 2013-04-14T11:56:08.547 回答