我使用的是烬2.8.0和烬数据2.8.0。我有以下型号定义:余烬数据未加载belongsTo模型
//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');
});
我模板/专卖店/ 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}}
会h ave向表中的每一行提出了/ floors/{id}的请求。
我缺少什么? 在Ember中处理这个问题的正确方法是什么?
我的api应该返回与下面不同的东西吗?
[{"id":1,"floorId":1,"name":"McDonalds","number":"10-A","phone":"(11) 2020-3455","email":"[email protected]","photo":null,"createdAt":"2016-09-15T13:45:32.000Z","updatedAt":"2016-09-15T13:45:32.000Z"}]
我应该使用其他型号的钩手动加载相关的模型?
您的'store'模型的属性名称需要与服务器为您提供的内容相匹配,除非您已在适配器/序列化程序/某处为我们定义了一些特殊处理(我忘记了现在发生了这种情况)似乎不可能。所以,返回'floor'而不是'floorId',事情可能刚刚开始工作。 – Thernys
@Thernys现场,谢谢!有趣的是,改变我的api返回值会修复它,但是,将模型的属性名称从'floor'更改为'floorId'不会。这将是一些呃数据公约thingy?还有,请谨慎回答这个问题? –
还发现你可以自定义处理,如你所说@Thernys:https://guides.emberjs.com/v2.8.0/models/customizing-serializers/#toc_relationships –