mas*_*ter 3 ember.js ember-data
我很贪婪,但我已经花了好几个小时解决这个问题而无法自己解决这个问题.这是我的路线(使用ember-cli):
import Ember from 'ember';
export default Ember.Route.extend({
actions: {
save: function() {
var controller = this.controller;
controller.get('model').save().then(function(account) {
console.log('account saved');
controller.transitionToRoute('accounts.index');
}, function(response) {
console.log('account NOT saved');
});
return false;
},
deleteAccount: function() {
var controller = this.controller;
controller.get('model').destroyRecord().then(function(account) {
console.log('account deleted');
controller.transitionToRoute('accounts.index');
}, function(response) {
console.log('account NOT deleted');
});
return false;
},
cancel: function() {
this.controller.get('model').rollback();
this.transitionToRoute('accounts.index');
return false;
},
}
});
Run Code Online (Sandbox Code Playgroud)
我在我的模板(按钮)中触发deleteAccount操作.有趣的是,代码实际上是删除记录.它发送成功的删除请求,api删除该帐户.但它永远不会转换为accounts.index.而是记录"帐户未删除".如果我手动转到account.index,那么模型就不再存在(正如人们所期望的那样).我从官方的ember文档中获取了代码.请参阅:http://emberjs.com/api/data/classes/DS.Model.html#method_destroyRecord
那么为什么在实际删除模型时承诺总是失败?非常感谢您的帮助!
顺便说一句:这是一个编辑路线,其中account_id作为参数传递,因此无需在路线上手动定义"模型功能".以防万一有人在想.
我想我刚解决了.destroyRecord()承诺失败的原因似乎是我的API响应了EMPTY HTTP 200响应.但是200通常意味着返回实体而事实并非如此.所以我调整了API来返回一个空的204响应,这就行了.这个SO答案实际上帮了很多:更新和删除的HTTP状态代码?
如果响应包括描述状态的实体,则成功响应应为200(OK),如果操作尚未执行,则应为202(已接受);如果操作已颁布但响应不包括,则应为204(无内容)一个实体.