【问题标题】:Can I POST multiple models using Ember Data?我可以使用 Ember Data 发布多个模型吗?
【发布时间】:2015-11-09 18:55:11
【问题描述】:

假设您有一个设置为相当标准 API 的用户模型。在前端,您有一个 Ember 项目,该项目也具有该用户模型。正常的创建调用如下所示:

store.createRecord('user', {email: 'test@gmail.com'}).save();

这会将 POST 请求发送到 /api/users 之类的东西。然而,相当广泛的 API 支持是一次创建多个模型。因此,例如,POST 调用将发送users: [{email: 'test@gmail.com'}, {email: 'test2@gmail.com'}, ...] 之类的对象数组,而不是仅发送user: {email: 'test@gmail.com'} 下的单个对象。

我在 ember 中看到的处理方式是在运行时执行多个创建调用。但是,这非常低效,我想知道 Ember 是否支持同时保存多个模型?您将如何在 Ember 中实现这一目标?

【问题讨论】:

    标签: ember.js ember-data


    【解决方案1】:

    您无法在单个 POST 请求 Ember Data 中保存模型数组,但有一种方法。

    您可以使用EmbeddedRecordsMixin 保存hasMany 'user' 的父模型,其中将包含关系ID 或完整记录。你的序列化器看起来像 -

    import DS from 'ember-data';
    
    export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
      attrs: {
        users: { embedded: 'always' },
      }
    });
    

    根据您的用例,仅为此目的创建父模型可能是有意义的hasMany 'user'。如果您想使用现有模型并且不总是希望嵌入其用户记录,则可以使用here 的答案。

    如果您决定单独保存模型,则需要执行users.invoke('save'),这将触发每个模型的 POST。

    【讨论】:

      【解决方案2】:

      如果您专门询问 Ember Data,我不知道有什么方法可以做到这一点(我认为不可能在集合/数组上使用任何等效的 save())。可能有其他可用的数据库(例如,您可以查看Orbit.JS - 这是我尚未完成的事情)

      我这样做的方式是在我的后端有一个自定义端点,它接收某个 JSON 有效负载并创建资源。您可以通过发出常规 ajax 调用来实现,请参见这个示例(来自我的一个项目)。

      let content = //get content that you want to post
      let accessToken = this.get('session.session.authenticated.token');
      Ember.$.ajax({
          data: JSON.stringify(content),
          dataType: 'json',
          method: 'POST',
          url: 'path/to/my/custom/end/point',
          headers: {
            'Content-Type': 'application/json',
            'Authorization': `Beader ${accessToken}`
          }
        }).then((result) => {
          // Code for success
        }, (jqXHR) => {
          // Code for error
        }).always(() => {
          // Code for always/finally
        });
      

      如您所见,这都是自定义代码,没有利用 Ember 数据存储或模型。到目前为止,我还没有找到更好的答案。

      编辑:看到安多罗夫的回答后。我忘了提一件事。我正在使用 Ember Data 2.0(默认为 JSONAPI)和带有 JSON API 的 EmbeddedRecordsMixin does not work 属性

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-27
        • 2011-02-10
        • 1970-01-01
        • 1970-01-01
        • 2020-05-10
        • 1970-01-01
        • 2023-03-07
        • 2018-08-09
        相关资源
        最近更新 更多