如何使用Ember数据访问json中的嵌套对象

Chr*_*ris 9 ember.js ember-data

我正在使用Ember数据并且很难找到get ember来识别来自服务器的JSON响应中的嵌套属性.这是ember-1.0.0-pre.4.js.

目前,我已经设置了与Ember数据修订版11相关的模型

# School Model
App.School = DS.Model.extend
  addr:       DS.belongsTo('App.Addr')

  name:       DS.attr 'string'
  status:     DS.attr 'string'

# Address Model
App.Addr = DS.Model.extend
  school:   DS.belongsTo 'App.School'

  line1:    DS.attr 'string'
  city:     DS.attr 'string'
  state:    DS.attr 'string'
  iso:      DS.attr 'string'
Run Code Online (Sandbox Code Playgroud)

这是我服务器的JSON响应:

{"schools":
 [{
    "_id":"51020261bbc3b8c526000007",
    "name":"Willamette",
    "status":"p",
    "addr":{
      "line1":"122 Evergreen Terrace",
      "city":"Springfield",
      "state":"IL",
      "iso":"US"
    }
   }    
  ]}
Run Code Online (Sandbox Code Playgroud)

我的适配器设置如下:

    App.Store = DS.Store.extend
      revision: 11
      adapter: DS.RESTAdapter.create({
        url: "http://localhost:8000/api"
        serializer: DS.RESTSerializer.extend
        primaryKey: (type) ->
          '_id';
      }) 
Run Code Online (Sandbox Code Playgroud)

更新:我试图映射addr属性,如下所示.仍然没有骰子......

DS.RESTAdapter.map 'App.School', 
  addr: { embedded: 'always'}
Run Code Online (Sandbox Code Playgroud)

在我的模板中,我想做这样的事......

   <script type="text/x-handlebars" data-template-name="school">
      <h2>School: {{name}}</h2>
      <p> Status: {{ status }}</p>
      <p> Address: {{ addr.line1 }} {{ addr.city }} </p>
    </script>
Run Code Online (Sandbox Code Playgroud)

名称和状态属性渲染正常.但是addr.line1和addr.city是空白的.有没有办法让Ember识别嵌套的addr propeties?

谢谢!

sma*_*sma 6

由于您在学校JSON中嵌入了addr JSON,因此您需要在DS.RESTAdapter中设置映射.

DS.RESTAdapter.map 'App.School',
  addr: { embedded: 'always' }
Run Code Online (Sandbox Code Playgroud)

嵌入式选项可以有两个值,1)始终,2)加载.

有关详细信息,请参阅Yehuda的答案:https://stackoverflow.com/a/14324532/1409279


Zah*_*iaz 6

你有时间看看吗?

Ember数据:模型碎片

它允许嵌套数据