Ember-data无法读取未定义的属性“长度”

时间:2015-04-26 08:34:01

标签: javascript jquery ember.js ember-data

我正在尝试使用ember-data从api服务器获取数据,我将ember-data添加到ember starter-kit中。

使用

App = Ember.Application.create();

App.Router.map(function() {
  // put your routes here
});

App.ApplicationAdapter = DS.RESTAdapter.extend({
    namespace: 'emberjs/ember.js',
    host     : 'https://api.github.com/repos'
});

App.Store = DS.Store.extend({
    adapter: 'App.ApplicationAdapter'
});

App.IndexRoute = Ember.Route.extend({
  model: function() {
    return this.store.find('pull');
  }
});

App.Pull = DS.Model.extend({
    url : DS.attr(),
    title  : DS.attr(),
    body  : DS.attr()
});

为每个请求提供相同的错误。然后我尝试用github,它给出了同样的错误。

我连接的Api:Github api

  

处理路由时出错:index无法读取属性'length'   undefined TypeError:无法读取未定义的属性“length”

1 个答案:

答案 0 :(得分:4)

Ember在返回多个结果时需要复数的根对象,在本例中为pulls,即

{
    "pulls": [...]
}

当您使用api进行操作时,您无法控制您需要使用修改后的Serializer将数据更改为余烬预期格式,如下所示:

<强> /app/serializers/pull.js

import DS from "ember-data";

export default DS.RESTSerializer.extend({
    normalizePayload: function(payload) {
        if(Array.isArray(payload)) {
            return {"pulls": payload };
        }
        return payload;
    }
});

有关序列化程序的信息: http://emberjs.com/api/data/classes/DS.RESTSerializer.html