处理路径时出现Ember错误:列出断言失败

时间:2015-12-03 02:44:47

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

我一直在努力让Emberjs前端(使用Ember Data)与我的Flask API后端一起工作。适配器似乎正在工作,因为当列出'列表'路径在浏览器中被点击,我也可以检查网络检查器中的原始对象,但是在Ember Inspector中它显示有关联的模型,但是所有数据都是未定义的,路径没有被加载(模板没有显示,没有数据)尽管我付出了努力,我仍然不断得到这个错误:

处理路线时出错:列出断言失败:您必须包含' id'用于列在传递给' push'

的对象中

我发送的对象如下:

{
 "data": {
   "attributes":{
     "make": "BMW", 
     "model": "640I", 
     "odometer": "11530", 
     "trim": "CPE 640I", 
     "year": "2016"
   }, 
   "id": "1", 
   "type": "listings"
  }
}

据我所知,它符合Ember Data所需的json-api格式。

这是我的适配器,序列化程序,路由和模型的代码。

  

/adapters/application.js

  import DS from 'ember-data';
  export default DS.JSONAPIAdapter.extend({
    host: 'http://localhost:5000',
    namespace: 'PS/api_v1_0'
  });
  

/serializers/application.js

import DS from 'ember-data';
import Ember from "ember";

export default DS.JSONAPISerializer.extend({
  keyForAttribute: function(key){
    return Ember.String.dasherize(key);
  },
  serializeId: function(id) {
    return id.toString();
  }
});
  

/serializers/listing.js

import DS from 'ember-data';

export default DS.JSONAPISerializer.extend({

  normalizeFindRecordResponse(store, type, payload){
    return {
      data: {
        attributes: {
          exteriorColor: payload.exterior_color, 
          interiorColor: payload.interior_color,
          make: payload.make,
          mmrPrice: payload.mmr_price,
          model: payload.model,
          odometer: payload.odometer,
          trim: payload.trim,
          year: payload.year,
        },
        id: payload.login,
        type: type.modelName,
      }
    };
  }
});
  

/models/listing.js

import DS from 'ember-data';

export default DS.Model.extend({
  exteriorColor: DS.attr('string'),
  interiorColor: DS.attr('string'),
  make: DS.attr('string'),
  mmrPrice: DS.attr('string'),
  model: DS.attr('string'),
  odometer: DS.attr('string'),
  trim: DS.attr('string'),
  year: DS.attr('string'),
});
  

/routes/listing.js

import Ember from 'ember';

export default Ember.Route.extend({
  model(){
    return this.store.findRecord('listing', '1');
  }
});

我觉得我已经尝试了一切来尝试塑造JSON以便通过Ember Data进行序列化,但是我已经碰壁了,找不到任何其他相关问题 - 任何人都知道如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

问题有两方面:在序列化程序中,我访问了id为payload.login而不是payload['data'].id的错误变量。此外,我没有为有效负载对象索引属性的属性值。

我的新序列化程序如下所示:

  

/serializers/listing.js

import DS from 'ember-data';

export default DS.JSONAPISerializer.extend({
  normalizeFindRecordResponse(store, type, payload){
    //console.log(payload['data']['attributes']);
    return {
      data: {
        attributes: {
          exteriorColor: payload['data']['attributes'].exterior_color, 
          interiorColor: payload['data']['attributes'].interior_color,
          make: payload['data']['attributes'].make,
          mmrPrice: payload['data']['attributes'].mmr_price,
          model: payload['data']['attributes'].model,
          odometer: payload['data']['attributes'].odometer,
          trim: payload['data']['attributes'].trim,
          year: payload['data']['attributes'].year,
        },
        id: payload['data'].id,
        type: type.modelName,
      }
    };
  }
});