【问题标题】:How to unload a record in Ember 2.3.0?如何在 Ember 2.3.0 中卸载记录?
【发布时间】:2016-01-30 11:57:24
【问题描述】:

我正在将 Ember 1.13.0 应用程序升级到 Ember 2.3.0,我遇到了一个小问题,即我无法在不导致 Ember 发出 HTTP 请求的情况下从数据存储中卸载记录。我不想删除服务器中的记录。我只是想从 Ember 数据存储中删除它。

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

【问题讨论】:

  • peekRecord 不返回承诺。只需发布或为空。
  • @Keo 那我怎么卸载这条记录呢?
  • 试试this.get('store').unloadRecord(this.get('store').peekRecord('posts', 1));
  • 为什么要在 cmets 中回答? :P
  • 我不确定这是否有帮助,以前从未使用过unloadRecord。如果可行,我将创建答案并解释find() 提出请求的原因。

标签: ember.js ember-data


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-20
    • 1970-01-01
    • 1970-01-01
    • 2019-01-02
    相关资源
    最近更新 更多