一次批量保存多个模型
Save multiple model at once, in bulk
我知道这个主题已经在stackoverflow和其他论坛上讨论过了,但我找不到正确的方法。
我有一个名为"post"的模型,其中包含帖子信息(用户,描述等(。用户收到一些帖子,阅读它们并对其执行操作。当我请求 GET /api/posts/
时,这些帖子来自我的 api
还有一个名为"后状态"的模型,我在其中保存阅读帖子的人的操作:当他们喜欢、分享、投票或喜欢帖子时。
export default DS.Model.extend({
post: belongsTo('post'),
user: belongsTo('user'),
liked: attr('boolean', { defaultValue: false }),
favourited: attr('boolean', { defaultValue: false }),
voted: attr('boolean', { defaultValue: false }),
shared: attr('boolean', { defaultValue: false }),
});
我正在寻找一种方法,让我的余烬应用程序批量保存我的后状态模型,就像我批量接收帖子的方式一样。 帖子状态将使用 api 调用 POST /api/post-states/
我在讨论中读到最好的方法是创建自定义适配器,但我不确定在其中放什么才能做到这一点......也许创建一个函数saveAllRecords()
?
对我来说最好的解决方案是什么?
谢谢你的帮助!
我环顾四周,似乎没有合适的方法可以用 Ember 做到这一点,但我想出了一些我不确定它有多少余烬方式的东西。您可以做的是创建一个包含 hasMany
属性的不同模型,该属性将包含要批量保存的模型,然后将这些模型添加到容器模型中,您可以使用序列化程序/适配器来获取所需的内容。以下是它的工作原理:
模型(我们称之为post-state-container
(
import DS from 'ember-data';
export default DS.Model.extend({
postStates: DS.hasMany('post-state')
});
序列化程序
import DS from 'ember-data';
import Ember from 'ember';
export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
attrs: {
postStates: { embedded: 'always' },
},
serializeIntoHash: function(data, type, record, options) {
Ember.$.extend(data, this.serialize(record, options));
}
});
您可以在此处调整发送到服务器的有效负载以适应后端的需求,因为您将从this.serialize(record, options)
获得 JSON 格式的序列化post-state
对象列表
适配器
import DS from 'ember-data';
export default DS.RESTAdapter.extend({
namespace: 'api',
urlForCreateRecord: function() {
return this.get('namespace') + '/post-states';
},
});
如何使用它(可能在某处的路由或控制器中操作(
let record1 = this.store.createRecord('post-state'); //These would be your populated records
let record2 = this.store.createRecord('post-state'); //These would be your populated records
let postStateContainer = this.store.createRecord('post-state-container');
postStateContainer.get('post-state-container').pushObject(record1);
postStateContainer.get('post-state-container').pushObject(record2);
postStateContainer.save();
我已经对此进行了测试,并且有效。我不确定是否有更好的方法来使用 JSONApi 或类似的东西
你可以看看ember-api-actions是如何做到的。查看构建 url 和包含执行 ajax 调用的方法的文件之一。您基本上可以复制这些方法并在模型中使用它。但我认为此时只使用插件会更容易:)
- 主干:如何保存模型集合中模型的属性更改
- 保存模型返回错误
- 猫鼬数据不会保存模型的新实例
- 主干:在单个请求中批量保存模型
- 如何使用轨迹选项进行选择,以角度保存模型中的选定对象
- JavascriptMVC - 保存模型时的验证错误
- 主干网.js - 在不保存模型的情况下发出 POST 请求
- EmberJS无法调用方法'查找'保存模型时未定义的
- 保存模型后无法重新渲染主干视图
- Django通过JS而不是表单提交来保存模型
- 在使用具有隔离作用域的指令时保存模型值不起作用
- Backbone.js保存模型don't在android 2.x上引起ajax PUT请求
- 保存模型时,只将所需的插件加载到架构中
- 保存模型记录不起作用(Spine)
- 保存模型时更新主干视图
- 从three.js中保存模型
- 余烬:下划线模型名称在JSON中保存模型
- 在AngularJS中保存模型的静态副本
- 主干保存模型问题
- Backbone.js保存模型的属性是其他模型的数组