使用Ember数据,但未渲染模型的属性

时间:2013-02-20 05:38:19

标签: ember.js ember-data

我刚刚开始使用Ember和Ember Data。我有一个非常简单的服务,它正在打我的后端服务(用Node编写)。我的服务返回两项。在我的HTML中,我的两个项目显示,或者至少是他们的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"
        }
    ]
}

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

默认RESTAdapter映射是下划线 - &gt;骆驼形态。这意味着如果您的模型属性为firstName,则服务器应发送包含first_name的JSON。

要解决此问题,您可以发送如下所示的JSON:

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

或覆盖keyForAttributeName中的RESTSerializer功能。 对于一对一映射,您可以执行以下操作:

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

或者映射这样的单个模型:

adapter.map('App.Grunt', { 
  firstName: { keyName: 'firstName'},
  lastName: { keyName: 'lastName'}
});