【问题标题】:Ember createRecord / RESTAdapater without nestingEmber createRecord / RESTadapater 无嵌套
【发布时间】:2016-03-10 01:23:36
【问题描述】:

我正在尝试使用 Ember 和 Node.js 创建记录。显然,Ember 喜欢嵌套你的对象。

如果我给它:

  this.store.createRecord('meal', {
    name: 'the name',
    meal_time: 'the time',
    tolerance: 'ouch'
  }).save();

Node 在req.body 中得到这个:

{ meal:
   { id: 'e5c90c23-1eb1-49e1-a3fa-865944b5eeea',
     name: 'the name',
     meal_time: 'the time',
     tolerance: 'ouch' } 
}

我宁愿修改 ember 端而不是节点端。

createRecord 有没有办法在不嵌套的情况下发送对象?

【问题讨论】:

  • 这就是 ember 的工作原理!考虑到模型是 REST 资源,它会尝试保存模型。从 REST Api 的角度来看也是正确的。

标签: rest ember.js ember-data


【解决方案1】:

您需要自定义您的序列化程序。

像这样创建应用程序序列化程序:ember g serializer application

然后编辑它以使用基本的RESTSerializer

然后通过覆盖其属性和方法对其进行自定义,使其产生所需的输出。

自定义的直接方法是normalizeCreateRecordResponse,但这只是表面。

理想情况下,您希望各种操作的行为一致,而不仅仅是createRecord。因此,您需要研究序列化程序是如何组织的。阅读official guide to serializers,介绍JSONSerializerRESTSerializer,查看RESTSerializer 代码库。

【讨论】:

    【解决方案2】:

    实现这一点的最简单方法是覆盖Serializer.serializeIntoHash() http://emberjs.com/api/data/classes/DS.RESTSerializer.html#method_serializeIntoHash

    serializeIntoHash(hash, type, snapshot, options) {
      Ember.merge(hash, this.serialize(snapshot, options));
    }
    

    此代码将从所有传出模型中删除该顶级对象。

    您可以在 Application Serializer.. 或您可能拥有的任何特定于模型的序列化器上覆盖它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-22
      • 1970-01-01
      • 2014-10-31
      • 1970-01-01
      • 2014-08-30
      • 2015-09-24
      相关资源
      最近更新 更多