我们使用的是Ember V1.0.0-pre.2,我们的把手如下:
{{#each data.Product}}
<div>
{{Details.uid}} - {{Details.Name}}
</div>
{{/each}}
我们的'数据'位来自这个json:
{
"Product": [
{
"Details": {
"uid": "1",
"Name": "one"
}
},
{
"Details": {
"uid": "2",
"Name": "two"
}
},
{
"Details": {
"uid": "3",
"Name": "three"
}
},
{
"Details": {
"uid": "4",
"Name": "four"
}
},
{
"Details": {
"uid": "5",
"Name": "five"
}
}
]
}
此操作失败并显示以下警告:
WARNING: Watching an undefined global, Ember expects watched globals to be setup by the time the run loop is flushed, check for typos
当我将Details.whatever
更改为details.whatever
时,警告消失。
这是设计还是我们可以以某种方式绕过它?数据以固定格式从服务器返回,如果可以避免,我们不想使用其他临时模型。
答案 0 :(得分:1)
Ember有一个命名策略,其中“instances / attributes”总是以小写字母开头,而“classes”总是以大写字母开头。我认为这可能是你遇到一些问题的地方,如果可能的话,你应该将你的JSON反序列化为以小写字母开头的属性。
从指南(http://emberjs.com/guides/object-model/classes-and-instances/)中拉出相关部分:
按照惯例,包含类的属性或变量是大写的,而实例则不是。因此,例如,变量Person将包含一个类,而person将包含一个实例(通常是Person类)。您应该在Ember应用程序中坚持这些命名约定。
答案 1 :(得分:0)
命名约定也适用于模型数据,但如果您无法更改API的内容,您可以通过基于每个属性定义地图来解决这个问题,例如
App.Adapter.map('App.Product', {
details: {key: 'Details'},
name: {key: 'Name'},
fooBar: {key: 'FOO_BaR'}
...
});
请参阅此处,了解有关如何将json映射到模型的更多参考:https://github.com/emberjs/data/blob/master/packages/ember-data/lib/system/mixins/mappable.js
希望有所帮助