如何在Ember 2.3.0中卸载记录?

时间:2016-01-30 11:57:24

标签: ember.js ember-data

我正在将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卸载记录的正确方法是什么?感谢。

1 个答案:

答案 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);
}