Ember数据存储处理对象数组

nkhmeac6  于 2022-09-28  发布在  其他
关注(0)|答案(1)|浏览(159)

我是新成员,通过构建一个小模块来探索它的功能。我遇到了一个需要同步更新ember模型内容的场景。ember数据模型包含一个对象数组作为内容。
我希望执行以下几个任务

  • 执行数组内容重新排序-为了简单起见,我们可以假设交换第一项和最后一项。
  • 在没有网络呼叫的情况下附加记录
  • 删除记录而不进行网络呼叫。

这样做应该会自动同步数据绑定/计算属性
peekAll调用后的数据模型包含10条记录(如下所示),我需要对这些记录执行上述操作。
我的模型如下所示

  1. export default Model.extend({
  2. testId: attr('number'),
  3. name: attr('string')
  4. });

更新内容记录的正确方法是什么?有人能建议如何进行吗?

xqkwcwgp

xqkwcwgp1#

在我看来,这就像运行let arr = await store.findAll('test-model')这样的程序的结果,对吗?这可能是一个PromiseArray,您可以通过对其调用arr.slice()来作为Javascript数组访问数据。这将允许您执行正常的数组操作,尽管在这种情况下执行内容重新排序并没有多大意义。我想你是以它为例。
要在没有网络调用的情况下添加和删除记录,您可以返回存储区,这是what is covered in the docs,不需要对您正在查看的这个对象进行操作。
添加新记录:

  1. let testModel = store.createRecord('test-model', {
  2. name: 'Lorem ipsum'
  3. });
  4. testModel.save(); //until you do this no network data will be sent

删除记录:

  1. let testModel = store.peekRecord('testModel', 1); //to get a record with ID of 1
  2. testModel.deleteRecord();
  3. testModel.save(); //until you run save no network is sent

一旦您在存储上采取了类似的操作,您在上面发布的数据结构*可能会更新为包含新数据,具体取决于您最初的访问方式。您还可以从存储区重新获取数据,该存储区现在会知道您添加了一个删除的模型(即使您还没有将其保存回服务器)
如果尚未保存,并且重新执行peekRecord,则需要从结果中筛选出所有已删除的记录。

  1. let undeletedModels = this.store.peekAll('test-model').filter(m => !m.isDeleted);
展开查看全部

相关问题