【问题标题】:Ember Data bulk saves to serverEmber 数据批量保存到服务器
【发布时间】:2014-06-16 15:40:35
【问题描述】:

Ember Data 正在快速地从一个版本到另一个版本,保存数据的方法也随之发生了变化。现在使用 1.0.0-beta.8.2a68c63a 版本,正确的方法是更新记录,然后执行 record.save() 以触发返回服务器的 PUT 请求。使用我当前的应用程序,我一次更新多条记录,这可能涉及 50+ PUT ajax 请求返回服务器。我们担心性能和效率问题,并且没有找到任何用于执行批处理请求的文档。如果有的话,我们在网上发现了很多其他人也想做同样的事情,但还没有找到好的解决方案。

现在我正在研究手动序列化这些对象并将它们保存回服务器,我认为这就是 Ember Data 的全部意义所在。因此,也许根本不使用 Ember Data 并手动编写 CRUD 请求并制作我自己的数据层来处理所有这些,并仅使用 ArrayControllers 和 ObjectControllers 将数据保存到 Handlebars 模板中并绑定到 Handlebars 模板中,这对我来说是最有利的。这样做的好处似乎是它可以按照我需要的方式工作(批处理请求),并且代码不会与 Ember Data 的未来版本中断。有什么想法或解决方案吗?

【问题讨论】:

  • 如果您谈论的是多种资源类型,以及针对同一端点的多个更新,我会完全放弃 Ember Data。
  • 是的,它涉及重新排列页面上的块列表,然后保存它们的位置,这意味着更新所有块。因此,当您移动一个时,它们都会发生变化,每次可能有 50 到 100 个 PUT 命令返回服务器。似乎 Ember Data 还没有为此做好准备。
  • 绝对不是,你最好滚动自己的实现,它不应该太重。
  • 我就是这么想的。就这样。
  • 我有一个类似的用例,最后不得不自己动手。 stackoverflow.com/questions/31412839/…

标签: ember.js save batch-updates


【解决方案1】:

您可以使用DS.EmbeddedRecordsMixin 来完成。如果您的 Page 对象有很多块(例如,根据您的评论),那么 page-serializer.js 看起来像:

import DS from 'ember-data';

export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
  attrs: {
    blocks: { serialize: 'records' }
  }
});

每当您保存页面记录时,其所有关联的块记录都将包含在该 PUT 请求中。

请参阅文档here

【讨论】:

  • 现在可能就是这种情况,但我已经停止使用 Ember,因为它变得太大且难以使用。我觉得它又像 Sproutcore 了。
  • 不用担心。我想其他人可能会遇到这种情况。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-24
  • 1970-01-01
相关资源
最近更新 更多