Javascript Ember.js更改RestaAdapter JSON序列化

Javascript Ember.js更改RestaAdapter JSON序列化,javascript,ember.js,ember-data,Javascript,Ember.js,Ember Data,我有一个从API查询的模型: App.Deal = DS.Model.extend({ name: DS.attr('string'), value_in_cents: DS.attr('number'), closed_time: DS.attr('date'), user: DS.attr('object'), company: DS.attr('object') }); API返回类似以下内容: { pagination: { page: 1, total: 1

我有一个从API查询的模型:

App.Deal = DS.Model.extend({
  name: DS.attr('string'),
  value_in_cents: DS.attr('number'),
  closed_time: DS.attr('date'),
  user: DS.attr('object'),
  company: DS.attr('object')
});
API返回类似以下内容:

{ 
  pagination: { page: 1, total: 10 },
  entries: [ deal1, deal2, deal3, deal4 ]
}
我已将适配器更新为以下内容:

App.Adapter = DS.RESTAdapter.extend({
  url: 'http://api.pipelinedeals.com/api/v3',
  serializer: DS.RESTSerializer.extend({
    extractMany: function(loader, json, type, records) {
      var root = this.rootForType(type);
      var roots = this.pluralize(root);

      formattedJson = {};
      formattedJson[roots] = json.entries;
      delete formattedJson.pagination;
      this._super(loader, formattedJson, type, records);
    }
  })
});
newJson
具有我想要的格式,但我得到以下错误:

Uncaught Error: assertion failed: You tried to use a attribute type (object) that has not been registered ember-1.0.0-rc.2.js:52

您希望从
DS.RESTSerializer
继承并重写
extractMany
以获得如下内容:

extractMany: function(loader, json, type, records) {
    var root = 'entries';

    if (json[root]) {
      var objects = json[root], references = [];
      if (records) { records = records.toArray(); }

      for (var i = 0; i < objects.length; i++) {
        if (records) { loader.updateId(records[i], objects[i]); }
        var reference = this.extractRecordRepresentation(loader, type, objects[i]);
        references.push(reference);
      }

      loader.populateArray(references);
    }
  },
extractMany:function(加载程序、json、类型、记录){
变量根='条目';
if(json[root]){
var objects=json[root],references=[];
if(records){records=records.toArray();}
对于(var i=0;i

由于您的服务器未将类型设置为根目录,因此您将无法使用侧加载。

您是否绝对确定
var root=this.pluralize(root);//deals
以字符串形式返回真正的“deals”?您不想将
DS.RESTAdapter
DS.JSONSerializer
一起使用。它将不起作用(或者在某一点上您将有意外的行为)。请参阅此其他问题以自定义序列化程序。是的,根可以按预期工作。有道理,我将使用DS.JSONSerializer。通过重写
extract
方法,我现在得到了以下错误:未捕获错误:断言失败:您的服务器返回了一个带有密钥分页的哈希,但您没有它的映射ember-1.0.0-rc.2.js:52 ember.assert ember-1.0.0-rc.2.js:52 DS.JSONSerializer.DS.Serializer.extend.sideload ember data.js:6602 DS.JSONSerializer.DS.extend.extract ember-data.js:6546superWrapper ember-1.0.0-rc.2.js:947同样,这个SO post()覆盖了
extract
方法,而
extractMany
在它前面,所以我得到了
this.sideload
中失败的错误b/c。还有其他建议吗?
loader.populateArray(references)
是抛出“未捕获错误:断言失败:您试图使用一个尚未注册的属性类型(对象)ember-1.0.0-rc.2.js:52”的行,我在一些变体中得到了它。这到底是什么意思?