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.whateverするとdetails.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 に答える