获取错误:您需要将模型名称传递给商店的modelFor方法

Gre*_*egg 4 ember.js ember-data

使用Ember 2.6.0

定义以下路线:

Router.map(function() {
  this.route('brands');
  this.route('brand', {path: '/brands/:brand_id'});
});
Run Code Online (Sandbox Code Playgroud)

模型brand是:

export default Model.extend({
  name: attr('string'),
  description: attr('string'),
  dateCreated: attr('date'),
  lastUpdated: attr('date'),
  regions: hasMany('region')
});
Run Code Online (Sandbox Code Playgroud)

而模型region是:

export default Model.extend({
  name: attr('string'),
  dateCreated: attr('date'),
  lastUpdated: attr('date'),
  brand: belongsTo('brand')
});
Run Code Online (Sandbox Code Playgroud)

现在,当试图访问/brands我在路线中这样做:

export default Ember.Route.extend({
  model() {
    return this.store.findAll('brand');
  }
});
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

您需要将模型名称传递给商店的modelFor方法

这在添加brand路线和region关系之前有效.品牌是父母,所以我不确定为什么这不起作用.

更新:

regions: hasMany('region')brand模型中删除可以让事情再次发挥作用.不确定为什么它不能使用已定义的关系.

Gre*_*egg 7

所以事实证明我必须为每个对象创建序列化器.对于品牌我有:

import RESTSerializer from 'ember-data/serializers/rest';
import DS from 'ember-data';

export default RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
  attrs: {
      regions: {embedded: 'always'}
  }
});
Run Code Online (Sandbox Code Playgroud)

因为region我有:

import RESTSerializer from 'ember-data/serializers/rest';

export default RESTSerializer.extend({
});
Run Code Online (Sandbox Code Playgroud)

从技术上讲,它在没有区域序列化器的情况下工作,但是我得到一个警告,即ember regionsregion模型中找不到.我可以向ember提交一张票,建议不要创建一个空的RESTSerializer,以避免这个警告.