Ember:Promise(destroyRecord()。then())在成功请求时失败

时间:2015-02-07 21:38:46

标签: 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;
        },
    }
});

我在模板(按钮)中触发deleteAccount操作。有趣的是,代码实际上是删除记录。它发送成功的删除请求,api删除该帐户。但它永远不会转换为accounts.index。而是记录“帐户未删除”。如果我手动转到account.index,那么模型就不再存在(正如人们所期望的那样)。 我从官方的ember文档中获取了代码。请参阅:http://emberjs.com/api/data/classes/DS.Model.html#method_destroyRecord

那么为什么在实际删除模型时承诺总是失败?非常感谢您的帮助!

顺便说一句:这是一个将account_id作为参数传递的编辑路线,因此无需在路线上手动定义“模型功能”。以防万一有人在想。

1 个答案:

答案 0 :(得分:7)

我想我已经解决了。 destroyRecord()承诺失败的原因似乎是我的API响应了EMPTY HTTP 200响应。但是200通常意味着返回一个实体,但事实并非如此。所以我调整了API来返回一个空的204响应,这就行了。这个SO答案实际上帮了很多忙:HTTP status code for update and delete?

  

如果响应包含一个,那么成功的响应应该是200(OK)   描述状态的实体,202(已接受),如果操作尚未执行   已经颁布,或者如果行动已经颁布,则为204(无内容)   响应不包括实体。