【问题标题】:How to deleteRecord when it was never committed on the backend?当它从未在后端提交时如何删除记录?
【发布时间】:2013-04-24 02:40:42
【问题描述】:

我有一个简单的 ember-data 模型(rev 12 -master 截至 2013 年 4 月 21 日)

App.Foo = DS.Model.extend({
    name: DS.attr('string')
}).reopenClass({
    add: function(json) {
        //call create record but don't commit it
        var store = DS.get('defaultStore');
        store.createRecord(App.Foo, json);
    }
});

在我的应用程序的某个时刻,我需要从商店中删除一个项目,所以我尝试了通常的方法

var foo = store.find(App.Foo, 1);
foo.deleteRecord();

但是因为记录没有完全加载(服务器端)我得到了错误

未捕获的错误:尝试处理事件deleteRecord on 在 rootState.loading 状态下。调用 未定义

如果我打算以这种方式使用 ember-data,我该如何“伪造”提交或将记录标记为手动加载?

【问题讨论】:

  • 你能做到吗store.find(App.Foo, 1).then(function(data){data.deleteRecord();});
  • 在第 11 版中,我在各处使用deleteRecord 来记录未提交的记录,顺便说一句。但我通常可以处理该记录的实例,而无需调用 find
  • 正如我正在考虑的那样,deleteRecord 也应该像 Mehul 所说的那样工作。它对我有用。
  • @ToranBillups 这个fiddle 可能会有所帮助。我在ContactsAddRoute 中添加了类似的内容

标签: ember.js ember-data


【解决方案1】:

如果我没记错的话,你可以这样做:

var foo = store.find(App.Foo, 1);
foo.transaction.rollback();

这样记录将不再在提交时保存。

【讨论】:

  • 这不是删除记录,我相信它只是停止在客户端加载它
  • 我想你不需要删除从未提交过的记录。
  • 记录在通过store.find加载时被持久化
猜你喜欢
  • 2011-04-01
  • 2012-04-06
  • 2016-12-07
  • 1970-01-01
  • 2013-08-03
  • 2023-01-22
  • 2015-02-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多