ember.js - Ajax without ember data - Uncaught TypeError: Object #<Object> has no method 'forEach' -
i'm attempting build non blocking async call in ember.js app without using ember data.
i have following ember.js model:
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; } });
and calling follows in route:
app.indexroute = ember.route.extend({ model: function (params) { return app.player.getplayers(); } });
for reason getting following javascript error:
uncaught typeerror: object # has no method 'foreach'
i've tried few variants have seen around nothing seems work. appreciated...
edit - found solution darshan, here's working code:
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; } });
your response.foreach
suggests expecting json response body array. wrapped in root element players
or data
so.
{ "players": [...] }
if case need use foreach
on root element response.players.foreach
.
you want restructure code return promise directly. ember router pause until json loaded , proceed after finishes. this,
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; }); }
returning players
resolve promise. , ember understands when promise resolves result model
.
Comments
Post a Comment