【发布时间】:2016-09-16 13:20:25
【问题描述】:
我正在使用 ember 2.8.0 和 ember-data 2.8.0。我定义了以下模型:
//app/models/store.js
import DS from 'ember-data';
export default DS.Model.extend({
name: DS.attr('string'),
floor: DS.belongsTo('floor'),
number: DS.attr('string'),
phone: DS.attr('string'),
email: DS.attr('string'),
photo: DS.attr(),
createdAt: DS.attr('date'),
updatedAt: DS.attr('date')
});
//app/models/floor.js
import DS from 'ember-data';
export default DS.Model.extend({
name: DS.attr('string'),
stores: DS.hasMany('store'),
createdAt: DS.attr('date'),
updatedAt: DS.attr('date')
});
我的 router.js 有以下路由:
//app/router.js
this.route('stores', function() {
this.route('new');
this.route('edit');
});
我的 templates/stores/index.hbs 有以下{{#each}} 声明:
<tbody>
{{#each model as |store|}}
<tr>
<td>{{store.name}}</td>
<td>{{store.number}}</td>
<td>{{store.floor.name}}</td>
<td>{{store.phone}}</td>
<td>{{store.email}}</td>
<td>{{moment-format store.createdAt}}</td>
<td>{{moment-format store.updatedAt}}</td>
</tr>
{{/each}}
</tbody>
我原以为{{store.floor.name}} 行会针对表格中的每一行向 /floors/{id} 发出请求。
我错过了什么? 在 Ember 中处理这个问题的正确方法是什么?
我的 api 是否应该返回不同于以下内容的内容?
[{"id":1,"floorId":1,"name":"McDonalds","number":"10-A","phone":"(11) 2020-3455","email":"lapa@mcdonalds.com.br","photo":null,"createdAt":"2016-09-15T13:45:32.000Z","updatedAt":"2016-09-15T13:45:32.000Z"}]
我应该使用其他模型挂钩手动加载关联的模型吗?
【问题讨论】:
-
store模型的属性名称需要与服务器提供的名称相匹配,除非您在适配器/序列化器/某处为它们定义了一些特殊处理(我忘记了这种情况到底发生在哪里,现在),这似乎不太可能。因此,返回floor而不是floorId,一切可能才刚刚开始。 -
出现在@Thernys,谢谢!有趣的是,更改我的 api 返回的内容可以修复它,但是,将我的模型的属性名称从
floor更改为floorId不会。那会是一些余烬数据约定吗?另外,愿意回答这个问题吗? -
还可以找到您提到的自定义处理的位置@Thernys:guides.emberjs.com/v2.8.0/models/customizing-serializers/…
-
您在关系中缺少 { async: true }。
-
@user2105103 不,因为 ember 2.x 这是默认行为。
标签: javascript ember.js ember-data