我有一个控制器,列出了系统中的所有度量单位。当用户在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。使用承诺的then()
功能,然后在履行承诺时调用Ember的deleteRecord()
并且它似乎在本地工作。我这样说是因为这条记录会立即从屏幕和Ember调试器中消失。不幸的是,删除没有被持久化到后端,并且重新加载hte页面会立即恢复本地“已删除”记录。
我的问题是:
答案 0 :(得分: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();
})
}
答案 1 :(得分:8)
在ember-data v1.0.0-beta.4中,他们添加了一个destroyRecord方法,该方法在一次调用中执行删除和保存。您可以这样使用:
this.get('model').destroyRecord().then(function() {
router.transitionTo('users');
});
答案 2 :(得分: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();
});
}
}
});