【问题标题】:Ember-data cannot read property 'length' of undefinedEmber-data 无法读取未定义的属性“长度”
【发布时间】:2015-04-26 08:34:01
【问题描述】:

我正在尝试使用 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

处理路由时出错:索引无法读取属性“长度”的 未定义类型错误:无法读取未定义的属性“长度”

【问题讨论】:

  • 错误显示在哪一行?
  • 处理路由时出错:索引无法读取未定义的属性“长度”类型错误:无法读取未定义的属性“长度”

标签: javascript jquery ember.js ember-data


【解决方案1】:

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

{
    "pulls": [...]
}

当您使用您无法控制的 api 时,您需要使用经过修改的序列化程序将数据更改为 embers 预期格式,如下所示:

/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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-10
    • 2020-09-14
    • 2018-01-11
    相关资源
    最近更新 更多