我正在使用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'
以下是我服务器的JSON响应:
{"schools":
[{
"_id":"51020261bbc3b8c526000007",
"name":"Willamette",
"status":"p",
"addr":{
"line1":"122 Evergreen Terrace",
"city":"Springfield",
"state":"IL",
"iso":"US"
}
}
]}
我的适配器设置如下:
App.Store = DS.Store.extend
revision: 11
adapter: DS.RESTAdapter.create({
url: "http://localhost:8000/api"
serializer: DS.RESTSerializer.extend
primaryKey: (type) ->
'_id';
})
更新: 我试图映射addr属性,如下所示。仍然没有骰子......
DS.RESTAdapter.map 'App.School',
addr: { embedded: 'always'}
在我的模板中,我想做这样的事情......
<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>
名称和状态属性渲染正常。但是addr.line1和addr.city是空白的。有没有办法让Ember识别嵌套的addr propeties?
谢谢!
答案 0 :(得分:6)
由于您在学校JSON中嵌入了addr JSON,因此您需要在DS.RESTAdapter中设置映射。
DS.RESTAdapter.map 'App.School',
addr: { embedded: 'always' }
嵌入式选项可以有两个值,1)总是,2)加载。
有关详细信息,请参阅Yehuda的答案:https://stackoverflow.com/a/14324532/1409279
答案 1 :(得分:6)
答案 2 :(得分:2)
看起来sma的答案是正确的,我只需要首先引用适配器。这一点......
DS.RESTAdapter.map 'App.School', addr {embedded: 'always' }
...给出错误'无法调用未定义的地图'。所以更新到......
App.Adapter = DS.RESTAdapter.extend
bulkCommit: false
App.Adapter.map 'App.School', {
addr: {embedded: 'always'}
}
立即行动!