1

我有一个控制器,它列出了系统中的所有计量单位。当用户在模型中选择特定记录时,Uom我希望能够将其删除。我正在使用 Ember-Data beta-2。这是我到目前为止所拥有的:

App.UomsController = Ember.ArrayController.extend({
    actions: {
        deleteRecord: function(id) {
            console.log("deleting: " + id);
            var promisedDelete = this.store.find('uom',id).then(function(uom){
                uom.deleteRecord();
            });
        }
    }
});

该操作deleteRecord称为传递有效 ID 并返回一个承诺。使用 promise 的功能,当 promise 已经实现并且它似乎在本地工作时,then()我调用 Ember's 。deleteRecord()我这么说是因为这条记录会立即从屏幕和 Ember 调试器中消失。不幸的是,删除并没有保留到后端,重新加载 hte 页面会立即带回本地“已删除”的记录。

我的问题是:

  1. 这是执行本地删除的合理方法吗?
  2. 如何将删除持久化到后端?
4

3 回答 3

10

调用后,您必须调用uom.save()以将更改持久保存到后端uom.deleteRecord()

您正在做的事情可能有效,但似乎有点复杂(例如this.store.find('uom',id)会导致对后端的不必要请求)。尝试这个:

App.UomsItemController = Ember.ObjectController.extend({
    actions: {
        deleteRecord: function() {
            this.get('model').destroyRecord();
            // .destroyRecord() only exists in recent versions of ED
            // for previous versions use .deleteRecord() followed by .save()
            // (though you should really consider upgrading :))
        }
    }
);

App.UomsController = Ember.ArrayController.extend({
    itemController: 'uoms_item'
});

在您的模板中,您将拥有如下内容:

{{#each content}}
    {{name}} <a href="#" {{action "deleteRecord" this}}>Delete</a>
{{/each}}

编辑回答下面的评论:如果this.get('model')返回一个承诺,以下应该有效。

        deleteRecord: function() {
            this.get('model').then(function(item) {
                item.destroyRecord();
            })
        }
于 2013-09-25T18:28:48.480 回答
8

在 ember-data v1.0.0-beta.4 中,他们添加了一个 destroyRecord 方法,该方法在一次调用中执行删除和保存。您可以像这样使用它:

   this.get('model').destroyRecord().then(function() {
      router.transitionTo('users');
   });
于 2014-01-31T08:03:13.303 回答
3

deleteRecord方法可以在DS.Model类的任何实例上调用。它从存储中删除记录但它不会保留在后端。

App.UomsController = Ember.ArrayController.extend({ actions: { deleteRecord: function(id) { console.log("deleting: " + id); var promisedDelete = this.store.find('uom',id).then(function(uom){ uom.deleteRecord(); }); } } });

为了使删除保留在后端,我们必须对该记录调用 save 方法(与 createRecord() 相同,然后 save() 将记录保存在后端):

App.UomsController = Ember.ArrayController.extend({ actions: { deleteRecord: function(id) { console.log("deleting: " + id); var promisedDelete = this.store.find('uom',id).then(function(uom){ uom.deleteRecord(); uom.save(); //The deletion will persist now }); } } });

或者,您也可以使用持久删除destroyRecord()的类方法。DS.Model

App.UomsController = Ember.ArrayController.extend({ actions: { deleteRecord: function(id) { console.log("deleting: " + id); var promisedDelete = this.store.find('uom',id).then(function(uom){ uom.destroyRecord(); }); } } });

于 2014-10-07T05:15:21.107 回答