无法在ember中加载hasMany属性

时间:2016-01-07 16:20:33

标签: ember.js ember-data ember-cli

我收到错误

Assertion Failed: Passing classes to store methods has been removed. Please pass a dasherized string instead of undefined.

我的模特(喜欢)

url: attr('string'),
detail_url: attr('string'),
gallery_name: attr('string'),
description: attr('string'),
time: attr('string'),
thumbnail_url: attr('string'),
num_photos: attr('number'),
num_photos_HiFive: attr('number'),
is_following:attr('number'),
karma:attr('number'),
photoThumbs_HiFive:DS.hasMany('thumb'),

模特(拇指)

photo: attr('string'),
photo_url: attr('string'),

序列化器(两者都相同)

 export default DS.JSONSerializer.extend(DS.EmbeddedRecordsMixin,{
 isNewSerializerAPI: true,
 primaryKey:'pk',
 normalize: function(typeClass, hash) {
 var fields = Ember.get(typeClass, 'fields');
 fields.forEach(function(field) {
 var payloadField = Ember.String.underscore(field);
  if (field === payloadField) { return; }
  hash[field] = hash[payloadField];
  delete hash[payloadField];
});
return this._super.apply(this, arguments);
 }
 });

我能够收到响应表单server.In ember inspector,“like”模型显示数据。但“thumb”模型没有显示数据。当我注释掉“photoThumbs_HiFive:DS.hasMany ('拇指'),“。它工作正常但没有填充拇指模型。不知道为什么会发生这种情况。

1 个答案:

答案 0 :(得分:2)

我有类似的问题。如果后端的响应未返回遵循JSON API规范的JSON API文档以及http://jsonapi.org/format上的示例约定,则通常会发生此错误。有关详细信息,请参阅https://guides.emberjs.com/v2.3.0/models/customizing-serializers/

我按照这里的答案解决了这个问题:https://stackoverflow.com/a/34168112/5837307

基本上,修改您的like序列化程序以使用RESTSerializer而不是JSONSerializer,并将嵌入属性包含在序列化程序中的attr对象中。

在您的情况下,您可以执行以下操作:

export default DS.JSONSerializer.extend(DS.EmbeddedRecordsMixin,{
    isNewSerializerAPI: true,
    // . . .
    attrs: {
            photoThumbs_HiFive: { embedded: 'always' }
    }
});