Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 使用余烬数据,但未渲染模型上的属性_Ember.js_Ember Data - Fatal编程技术网

Ember.js 使用余烬数据,但未渲染模型上的属性

Ember.js 使用余烬数据,但未渲染模型上的属性,ember.js,ember-data,Ember.js,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.e

我刚刚开始使用余烬和余烬数据。我有一个非常简单的服务,它正在访问我的后端服务(在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>

谢谢你的帮助

默认的
RESTAdapter
映射是下划线->骆驼化表单。这意味着,如果模型的属性是
firstName
,服务器应该发送包含
first\u name
的JSON

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

"grunts": [
  {
    "id": 1,
    "first_name": "Joe",
    "last_name": "Bloggs"
  }]
adapter.map('App.Grunt', { 
  firstName: { keyName: 'firstName'},
  lastName: { keyName: 'lastName'}
});
或者重写
RESTSerializer
中的
keyForAttribute Name
函数。 对于一对一映射,您可以执行以下操作:

keyForAttributeName: function(type, name) {
  return name;
}
或者像这样映射单个模型:

"grunts": [
  {
    "id": 1,
    "first_name": "Joe",
    "last_name": "Bloggs"
  }]
adapter.map('App.Grunt', { 
  firstName: { keyName: 'firstName'},
  lastName: { keyName: 'lastName'}
});