我刚刚开始使用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"
}
]
}
感谢您的帮助!
答案 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'}
});