1

我们使用的是 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.whateverdetails.whatever警告消失。

这是设计使然还是我们可以以某种方式解决它?数据以固定格式从服务器返回,如果可以避免的话,我们不想使用另一个临时模型。

4

2 回答 2

1

Ember 有一个命名策略,其中“实例/属性”总是以小写字母开头,而“类”总是以大写字母开头。我认为这可能是您遇到一些问题的地方,如果可能的话,您应该将 JSON 反序列化为以小写字母开头的属性。

从指南中提取的相关部分(http://emberjs.com/guides/object-model/classes-and-instances/):

按照惯例,持有类的属性或变量是大写的,而实例则不是。因此,例如,变量 Person 将包含一个类,而 person 将包含一个实例(通常是 Person 类)。您应该在 Ember 应用程序中遵守这些命名约定。

于 2013-05-15T06:54:52.417 回答
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

希望能帮助到你

于 2013-05-15T07:36:07.873 回答