2013-09-25 30 views
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被称为传递有效的身份证件,并返回一个承诺。使用承诺的then()功能,然后在履行诺言时它会调用Ember的deleteRecord(),并且它似乎在本地工作。我说因为这个记录立即从屏幕和Ember调试器中消失。不幸的是,删除没有被保存到后端,并且重新加载hte页面会立即恢复本地的“已删除”记录。

我的问题是:

  1. 这是一种合理的方式执行当地删除?
  2. 如何持续删除后端?

回答

10

拨打uom.deleteRecord()后,您必须致电uom.save()才能将更改保留在后端。

你在做什么可以工作,但似乎有点复杂(例如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(); 
      }) 
     } 
+0

这是一个非常优雅的方式。谢谢。 – ken

+0

你可以更新这个答案的新版本的Ember数据?它返回'get('model')'的承诺。 – RyanJM

+0

@RyanJM,看我更新的答案 – chopper

8

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

this.get('model').destroyRecord().then(function() { 
     router.transitionTo('users'); 
    }); 
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(); }); } } });

的删除在后台持续下去,我们必须调用这个记录的保存方法(同createRecord(),然后保存()保存在后台记录):

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()方法,该类继续删除。

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

相关问题