试图用Ember获取json数据

时间:2013-02-16 00:01:17

标签: javascript json ember.js

这是我的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,它似乎更好,更快,更容易地完成工作。所以我正在切换框架。

3 个答案:

答案 0 :(得分:2)

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

MyApp.Adapter = DS.RESTAdapter.extend({
  namespace: 'app_dev.php'
});

答案 1 :(得分:1)

  1. 我认为最好通过url选项指定文件名:

    App.Store = DS.Store.extend({     修订:11,     adapter:DS.RESTAdapter.create({         url:“/ app_dev.php”     }) });

  2. 您的JSON结构应如下所示:

  3. {
        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。