我有应用程序可能会丢失与服务器的连接数天,当它最终重新连接存储器中存在的某些记录不再存在于服务器中。我需要删除这些记录,而不会在ui中创建闪烁。
我试图解决它,但无法到达任何地方。
store.findall似乎没有选项删除服务器未返回的记录。
我找不到连接store.unloadAll和store.findAll的方法,没有空白状态在屏幕上生效并导致闪烁
我也无法找到如何获得服务器实际返回的内容而不是完全手动(使我自己的ajax调用,这不会明显扩展)
我想知道其他人在这种情况下使用了什么
谢谢你的帮助
您可以覆盖适配器上的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;
}
});
你可以通过peekRecord()
然后reload()
获得所有记录。如果您的UI不依赖于模型的isReloading
属性,则重新加载不应更改视图直到完成。如果您的API支持coalesceFindRequests
,并确保在同一个runloop中对模型的所有记录执行重新加载,那么这应该只触发一个请求。
免责声明:我没有测试过这种方法,但应该可行。如果您遇到任何问题,请告诉我。