当它们不在服务器中时,如何删除商店中的记录

问题描述 投票:0回答:2

我有应用程序可能会丢失与服务器的连接数天,当它最终重新连接存储器中存在的某些记录不再存在于服务器中。我需要删除这些记录,而不会在ui中创建闪烁。

我试图解决它,但无法到达任何地方。

store.findall似乎没有选项删除服务器未返回的记录。

我找不到连接store.unloadAll和store.findAll的方法,没有空白状态在屏幕上生效并导致闪烁

我也无法找到如何获得服务器实际返回的内容而不是完全手动(使我自己的ajax调用,这不会明显扩展)

我想知道其他人在这种情况下使用了什么

谢谢你的帮助

ember.js ember-data
2个回答
0
投票

您可以覆盖适配器上的shouldBackgroundReloadAll和shouldBackgroundReloadRecord实现。

如ember适配器文档中所述:

商店使用此方法来确定在store.findAll方法使用缓存的记录数组解析后,存储是否应重新加载记录数组。

就像是:

// app/adapters/application.js

export default DS.RESTAdapter.extend({

  shouldReloadRecord: function(store, snapshot) {
    return true;
  },

  shouldReloadAll: function(store, snapshot) {
    return true;
  },

  // If this method returns true the store will re-fetch a record from the adapter.
  shouldBackgroundReloadRecord: function(store, snapshot) {
    return true;
  },

  // If this method returns true the store will re-fetch all records from the adapter.
  shouldBackgroundReloadAll: function(store, snapshot) {
    return true;
  }

});

参考:https://emberjs.com/api/ember-data/2.15/classes/DS.Adapter/methods/shouldBackgroundReloadAll?anchor=shouldBackgroundReloadAll


0
投票

你可以通过peekRecord()然后reload()获得所有记录。如果您的UI不依赖于模型的isReloading属性,则重新加载不应更改视图直到完成。如果您的API支持coalesceFindRequests,并确保在同一个runloop中对模型的所有记录执行重新加载,那么这应该只触发一个请求。

免责声明:我没有测试过这种方法,但应该可行。如果您遇到任何问题,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.