1

这是我的 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,它似乎做得更好、更快、更容易。所以我正在切换框架。

4

3 回答 3

2

您需要在适配器上使用命名空间选项。这可以指定如下,然后在创建商店时使用 MyApp 适配器。

MyApp.Adapter = DS.RESTAdapter.extend({
  namespace: 'app_dev.php'
});
于 2013-02-16T01:21:33.247 回答
1
  1. 我认为最好通过以下url选项指定文件名:

    App.Store = DS.Store.extend({ 修订:11,适配器:DS.RESTAdapter.create({ url: "/app_dev.php" }) });

  2. 您的 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 指南以获取更多参考。

于 2013-02-16T21:58:18.807 回答
0

Ember 要求您使用他们所谓的“类型键”来成功读取 JSON,换句话说,您需要将模型的名称放在对象本身之前,以便 Ember 识别该类型。

就我而言,我制作了一个 Java/Spring 后端并且不想将其添加到我的对象中,要在 ember 中解决这个问题,您可以创建一个 Serializer 文件,Ember Serializers 的文档,特别是 RESTSerializer 可以在这里找到。

要将 typeKey 添加到传入的 JSON 覆盖 normalizePayload 挂钩。这是我如何做到的一个例子:

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。

于 2014-07-08T15:30:14.223 回答