我正在将Ember 1.13.0应用程序升级到Ember 2.3.0,我面临一个小问题,我无法从数据存储中卸载记录而不会导致Ember发出HTTP请求。我不想删除服务器中的记录。我只想将它从Ember Data Store中删除。
我在Ember 1.13.0中使用了以下Ember DS.Store API:http://emberjs.com/api/data/classes/DS.Store.html#method_unloadRecord,它运行正常。样品:
this.store.find('post', 1).then(function(post) {
this.store.unloadRecord(post);
});
升级到2.3.0后,当我监控Chrome中的网络选项卡时,Ember正在向find
记录发出GET请求,然后将其卸载。因为它无法find
(我们的服务器没有匹配此调用的API),所以它不会卸载记录,并且更改不会出现在UI中。
我尝试通过以下方式解决此问题:
this.store.peekRecord('posts', 1).then(function(post) {
this.store.unloadRecord(post);
});
但这似乎不起作用。在不进行HTTP调用的情况下从Ember Data卸载记录的正确方法是什么?感谢。
答案 0 :(得分:2)
Ember数据会自动重新加载记录以使其与服务器保持同步。因此findRecord()
会立即解析,但在后台它会向服务器发出请求并在返回时更新值。此行为在ember-data 1.13.0
中已更改,并在toc_new-adapter-hooks-for-better-caching中进行了描述。
peekRecord的问题是peek*
方法只询问store
,因此无需返回承诺。因此,您的代码应如下所示:
const store = this.get('store');
const post = store.peekRecord('posts', 1);
if (post) {
store.unloadRecord(post);
}