用ember-data删除模型记录的正确方法

ken*_*ken 1 ember.js ember-data

我有一个控制器,列出了系统中的所有测量单位.当用户在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();
            });
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

该操作deleteRecord被称为传入有效ID,并返回承诺.使用then()承诺的功能,然后deleteRecord()当承诺履行并且它似乎在本地工作时,调用Ember .我这样说是因为这条记录会立即从屏幕和Ember调试器中消失.不幸的是,删除没有被持久化到后端,并且重新加载hte页面会立即恢复本地"已删除"记录.

我的问题是:

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

cho*_*per 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'
});
Run Code Online (Sandbox Code Playgroud)

在你的模板中你会有这样的东西:

{{#each content}}
    {{name}} <a href="#" {{action "deleteRecord" this}}>Delete</a>
{{/each}}
Run Code Online (Sandbox Code Playgroud)

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

        deleteRecord: function() {
            this.get('model').then(function(item) {
                item.destroyRecord();
            })
        }
Run Code Online (Sandbox Code Playgroud)


Rob*_*Rob 8

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

   this.get('model').destroyRecord().then(function() {
      router.transitionTo('users');
   });
Run Code Online (Sandbox Code Playgroud)