ember.js - 没有 Ember 数据的 Ajax - 未捕获的类型错误 : Object #<Object> has no method 'forEach'

标签 ember.js

我正在尝试在不使用 Ember Data 的情况下在 Ember.js 应用程序中构建非阻塞异步调用。

我有以下 Ember.js 模型:

App.Player = Ember.Object.extend({
    id: '',
    alias: '',
    name: '',
    twitterUserName: '',
    isFeatured: ''
});

App.Player.reopenClass({
    getPlayers: function () {
        var players = Ember.ArrayProxy.create({ content: [] });
        $.getJSON("/api/players").then(function (response) {
            response.forEach(function (p) {
                players.pushObject(App.Player.create(p));
            });
        });
        return players;
    }
});

我在我的 route 这样调用它:

App.IndexRoute = Ember.Route.extend({
    model: function (params) {
        return App.Player.getPlayers();
    }
});

出于某种原因,我收到以下 javascript 错误:

未捕获的类型错误:对象 # 没有方法 'forEach'

我已经尝试了一些我见过的变体,但似乎没有任何效果。任何帮助将不胜感激...

编辑 - 在 Darshan 的帮助下找到了解决方案,这是工作代码:

App.Player.reopenClass({
    getPlayers: function () {
        var players = [];
        $.ajax({
            url: "/api/players",
        }).then(function (response) {
            response.players.forEach(function (player) {
                var model = App.Player.create(player);
                players.addObject(model);
            });
        });
        return players;
    }
});

最佳答案

您的 response.forEach 表明您希望 json 响应主体是一个数组。它可能被包裹在一些根元素中,例如 playersdata ,就像这样。

{
  "players": [...]
}

如果是这种情况,您需要在该根元素上使用 forEach,例如 response.players.forEach

您还想重组该代码以直接返回 promise 。然后 Ember 路由器将暂停,直到您的 json 被加载,并且只有在它完成后才会继续。像这样,

getPlayers: function () {
  return $.getJSON("/api/players").then(function (response) {
    var players = Ember.ArrayProxy.create({ content: [] });
    response.players.forEach(function (p) {
      players.pushObject(App.Player.create(p));
    });

    return players;
  });
}

返回 players 解决 promise 。 Ember 明白当 promise 解决时,结果就是 model

关于ember.js - 没有 Ember 数据的 Ajax - 未捕获的类型错误 : Object #<Object> has no method 'forEach' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17713140/

相关文章:

ember.js - 在ember.js中定义多段捕获所有路由

Ember.js 服务器端分页

node.js - 为什么在 `./node_modules/googleapis` 中我看到的是 `build/src` 文件夹而不是 `src` 文件夹

rest - 如何强制ember-data从服务器重新加载记录的数据

javascript - Ember.js ember-data 查找远程服务器上的所有对象

ember.js - 如何在 Ember.js 中处理 'no route matched' 并显示 404 页面?

ember.js - emberfire 有没有办法指定模型上的时间戳属性应该被赋予 Firebase.ServerValue.TIMESTAMP 值?

javascript - 触发 Ember 组件中的函数

ember.js - 如何将我的服务器与我的 ember cli 应用程序连接

ember.js - 为什么我的嵌入式 hasMany 关系未定义?