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页面会立即恢复本地"已删除"记录.
我的问题是:
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)
在ember-data v1.0.0-beta.4中,他们添加了一个destroyRecord方法,该方法在一次调用中执行删除和保存.您可以这样使用:
this.get('model').destroyRecord().then(function() {
router.transitionTo('users');
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12188 次 |
| 最近记录: |