使用Ember 2.6.0
定义以下路线:
Router.map(function() {
this.route('brands');
this.route('brand', {path: '/brands/:brand_id'});
});
brand
的模型是:
export default Model.extend({
name: attr('string'),
description: attr('string'),
dateCreated: attr('date'),
lastUpdated: attr('date'),
regions: hasMany('region')
});
region
的模型是:
export default Model.extend({
name: attr('string'),
dateCreated: attr('date'),
lastUpdated: attr('date'),
brand: belongsTo('brand')
});
现在,在尝试访问/brands
时,我正在路线中执行此操作:
export default Ember.Route.extend({
model() {
return this.store.findAll('brand');
}
});
我收到以下错误:
您需要将模型名称传递给商店的modelFor方法
这在添加brand
路由和region
关系之前有效。品牌是父母,所以我不确定为什么这不起作用。
更新:
从regions: hasMany('region')
模型中删除brand
可以让事情再次发挥作用。不确定为什么它没有使用已定义的关系。
答案 0 :(得分:5)
事实证明我必须为每个对象创建序列化器。对于品牌我有:
import RESTSerializer from 'ember-data/serializers/rest';
import DS from 'ember-data';
export default RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
attrs: {
regions: {embedded: 'always'}
}
});
对于region
我有:
import RESTSerializer from 'ember-data/serializers/rest';
export default RESTSerializer.extend({
});
从技术上讲,它可以在没有区域序列化器的情况下工作,但我收到警告,即ember无法在regions
模型中找到region
。我可以向ember提交一张票,建议不要创建一个空的RESTSerializer
,以避免出现此警告。