1

Ember と Ember Data を使い始めたばかりです。私は非常に単純なサービスを持っています。これは、バックエンド サービス (Node で記述) にヒットしています。私のサービスは 2 つのアイテムを返します。私の HTML では、2 つのアイテムが表示されます。少なくともそれらの ID は表示されます。他のプロパティはレンダリングされていません。

結果:

* Hello, 1 !
* Hello, 2 !

app.js

var App = Ember.Application.create();

App.Store = DS.Store.extend({
    revision: 11
});

App.Grunt = DS.Model.extend({
    firstName: DS.attr('string'),
    lastName: DS.attr('string')
});

App.Router.map(function() {
    this.route("grunts", { path: "/grunts" });
});

App.IndexRoute = Ember.Route.extend({
    redirect: function() {
        this.transitionTo('grunts');
    }
});

App.GruntsRoute = Ember.Route.extend({
    model: function() {
        return App.Grunt.find();
    }
});

index.html

<script type="text/x-handlebars" data-template-name="application">
    <div>
        <p>{{outlet}}</p>
    </div>
</script>

<script type="text/x-handlebars" data-template-name="grunts">
    <ul>
        {{#each controller}}
            <li>Hello, {{id}} {{firstName}} {{lastName}}!</li>
        {{/each}}
    </ul>
</script>

JSON:

{
    "grunts": [
        {
            "id": 1,
            "firstName": "Joe",
            "lastName": "Bloggs"
        },
        {
            "id": 2,
            "firstName": "Someone",
            "lastName": "Else"
        }
    ]
}

ご協力いただきありがとうございます!

4

1 に答える 1

2

デフォルトのRESTAdapterマッピングはアンダースコア -> ラクダ化された形式です。これは、モデルの属性が のfirstName場合、サーバーは を含む JSON を送信する必要があることを意味しますfirst_name

これを修正するには、次のような JSON を送信します。

"grunts": [
  {
    "id": 1,
    "first_name": "Joe",
    "last_name": "Bloggs"
  }]

keyForAttributeNameまたは、 の関数をオーバーライドしますRESTSerializer。1 対 1 のマッピングの場合、次のことができます。

keyForAttributeName: function(type, name) {
  return name;
}

または、次のように単一のモデルをマップします。

adapter.map('App.Grunt', { 
  firstName: { keyName: 'firstName'},
  lastName: { keyName: 'lastName'}
});
于 2013-02-20T12:01:08.467 に答える