这是我的json数据:
[{"id":1,"iam":1,"youare":2,"lat":50.8275853,"lng":4.3809764,"msgbody":"Lorem ipsum lorem ipsum lorem ipsum"}]
这是我的Ember代码:
window.Messages = Ember.Application.create();
Messages.Store = DS.Store.extend({
revision: 11
});
Messages.MessagesRoute = Ember.Route.extend({
setupControllers: function(controller) {
controller.set('content', Messages.Message.find());
}
});
Messages.Message = DS.Model.extend({
msgbody: DS.attr('string')
});
Messages.MessagesController = Ember.ArrayController.extend({
content: []
});
事情是我的json数据存在/app_dev.php/messages不在/ messages / ...
我只是想做一个成功的获取请求,但我无法管理......你能说出我做错了什么,这样我就能掌握Ember的语法吗?
编辑感谢您的回答。只是告诉我经过多次努力使事情变得微不足道,我尝试了Angular,它似乎更好,更快,更容易地完成工作。所以我正在切换框架。
答案 0 :(得分:2)
您需要在适配器上使用命名空间选项。这可以按照以下方式指定,然后在创建商店时使用MyApp适配器。
MyApp.Adapter = DS.RESTAdapter.extend({
namespace: 'app_dev.php'
});
答案 1 :(得分:1)
我认为最好通过url
选项指定文件名:
App.Store = DS.Store.extend({ 修订:11, adapter:DS.RESTAdapter.create({ url:“/ app_dev.php” }) });
您的JSON结构应如下所示:
{
messages: [
{"id":1,"iam":1,"youare":2,"lat":50.8275853,"lng":4.3809764,"msgbody":"ipsum "},
{"id":2,"iam":1,"youare":2,"lat":50.8275853,"lng":4.3809764,"msgbody":"Lorem "}
]
}
有关详细信息,请参阅ember guide。
答案 2 :(得分:0)
Ember要求你使用他们所称的"键入键"为了成功读取JSON,换句话说,您需要在对象本身之前放置模型的名称,以便Ember识别出该类型。
在我的情况下,我做了一个Java / Spring后端并且不想将它添加到我的对象中,为了解决这个问题,你可以创建一个Serializer文件,Ember Serializers的文档,特别是可以找到RESTSerializer here
将typeKey添加到normalizePayload挂钩上的传入JSON。这是我如何做到这一点的一个例子:
normalizePayload: function(type, payload) {
var json = {};
json[type.typeKey] = payload;
return json;
}
如果你在出路时没有把你的typeKey放在JSON上,那么你在PUT或POST数据时可能会遇到类似的问题,所以你可能需要重载serializeIntoHash挂钩以删除传出数据上的typeKey。以下是一个对我有用的例子:
serializeIntoHash: function(hash, type, record, options){
Ember.merge(hash, this.serialize(record, options));
}
希望有所帮助!我看到你正在转向Angular(伟大的决定,我更喜欢Angular 100x而不是Ember,但我的工作要求我现在使用Ember,所以我正在通过它进行斗争。)但希望这可以帮助其他有类似问题的人无论是想要还是被迫使用Ember。