Ember V1.0.0-pre.2:手柄模板中的大写

时间:2013-05-15 05:51:46

标签: ember.js

我们使用的是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时,警告消失。

这是设计还是我们可以以某种方式绕过它?数据以固定格式从服务器返回,如果可以避免,我们不想使用其他临时模型。

2 个答案:

答案 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

希望有所帮助