Ember: Promise (destroyRecord().then()) 请求成功失败
Ember: Promise (destroyRecord().then()) failing on successful request
我是 ember 的新手,但我已经花了好几个小时解决这个问题,但我自己无法解决。这是我的路线(使用 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;
},
}
});
我正在我的模板(按钮)中触发 deleteAccount 操作。有趣的是代码实际上是在删除记录。它发送一个成功的删除请求并且 api 删除该帐户。但它永远不会过渡到 accounts.index。相反,它记录 "account NOT deleted"。如果我手动转到 account.index,那么该模型将不再存在(正如人们所期望的那样)。
我从官方 ember 文档中获得了代码。参见:http://emberjs.com/api/data/classes/DS.Model.html#method_destroyRecord
那么为什么在实际删除模型时承诺总是失败?非常感谢您的帮助!
顺便说一句:这是一个编辑路由,account_id 作为参数传递,因此无需在路由上手动定义 "model function"。以防万一有人想知道。
我想我刚刚解决了它。 destroyRecord() 承诺失败的原因似乎是我的 API 响应了 EMPTY HTTP 200 响应。但是 200 通常意味着一个实体是 returned,但事实并非如此。所以我将 API 调整为 return 一个空的 204 响应,这就成功了。这个 SO 答案实际上帮助了很多:
A successful response SHOULD be 200 (OK) if the response includes an
entity describing the status, 202 (Accepted) if the action has not yet
been enacted, or 204 (No Content) if the action has been enacted but
the response does not include an entity.
我是 ember 的新手,但我已经花了好几个小时解决这个问题,但我自己无法解决。这是我的路线(使用 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;
},
}
});
我正在我的模板(按钮)中触发 deleteAccount 操作。有趣的是代码实际上是在删除记录。它发送一个成功的删除请求并且 api 删除该帐户。但它永远不会过渡到 accounts.index。相反,它记录 "account NOT deleted"。如果我手动转到 account.index,那么该模型将不再存在(正如人们所期望的那样)。 我从官方 ember 文档中获得了代码。参见:http://emberjs.com/api/data/classes/DS.Model.html#method_destroyRecord
那么为什么在实际删除模型时承诺总是失败?非常感谢您的帮助!
顺便说一句:这是一个编辑路由,account_id 作为参数传递,因此无需在路由上手动定义 "model function"。以防万一有人想知道。
我想我刚刚解决了它。 destroyRecord() 承诺失败的原因似乎是我的 API 响应了 EMPTY HTTP 200 响应。但是 200 通常意味着一个实体是 returned,但事实并非如此。所以我将 API 调整为 return 一个空的 204 响应,这就成功了。这个 SO 答案实际上帮助了很多:
A successful response SHOULD be 200 (OK) if the response includes an entity describing the status, 202 (Accepted) if the action has not yet been enacted, or 204 (No Content) if the action has been enacted but the response does not include an entity.