【问题标题】:Normalizing the name of JSON name规范化 JSON 名称的名称
【发布时间】:2015-10-02 14:28:11
【问题描述】:

我正在使用 ember-data 来获取我的路由 api 上的所有事件:/api/events,问题是返回的 JSON 不符合 Ember 的请求,有什么我可以解决的吗是吗?

这是我的代码:

适配器和序列化器:

SiteApp.ApplicationAdapter = DS.RESTAdapter.extend({
  namespace: 'api'
});
SiteApp.ApplicationSerializer = DS.RESTSerializer.extend({
  primaryKey: '_id'
});

事件模型:

SiteApp.Event = DS.Model.extend({
  description : DS.attr(),
  name        : DS.attr().
  type        : DS.attr()
});

在路线中我有this.store.findAll('event');

JSON 是这样的:

{
  data: [{
    _id: "55f660bdd80a0fd2e298f333",
    attributes: {
      description: "test",
      name: "name",
      is_active: false
    },
    type: "events"
  }]
}

如果我更改“事件”的“数据”,这会起作用,但我不能,这不是一个选项。

是否可以通过其他方式解决?

【问题讨论】:

  • modelNameFromPayloadKey?
  • 当您说不能将data 更改为event 时,您是指在服务器上吗?因为您可以通过创建一个新对象并将data 的值分配给一个新的obj 来change it on the client
  • 是的,我无法更改服务器中的响应,所以我需要更改客户端,这可能吗?
  • 我会搜索这个modelNameFromPayloadKey @torazaburo
  • 是的,这有效@torazaburo,可以在 RESTSerializer 中获取类型的值,并分配新的有效负载??

标签: javascript json ember.js ember-data


【解决方案1】:

您不能直接更改该对象上键的名称,但可以使用event 属性创建一个新对象并将data 的值分配给该属性:

var newobj = {};
newobj.event = obj.data;

DEMO

【讨论】:

  • 你确定吗?我不能使用一些 ember 内置函数来解决这个问题?
  • 我不使用 ember,所以我不知道。这种方法有什么问题?
  • 我无权访问服务器,所以我无法使用它:/
  • 不,您在客户端执行此操作。您收到 JSON,解析它:var obj = JSON.parse(json),然后按照我在答案中的建议进行操作。
猜你喜欢
  • 2013-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多