Ember.js 删除操作不起作用

Ember.js 删除操作不起作用,ember.js,Ember.js,我试图通过以下方式学习ember.js。本教程向您展示了如何构建待办事项列表,但我在执行删除操作时遇到了问题。由于我是ember的新手,我不能100%确定你们需要看什么代码,但删除按钮位于app/templates/components/todo item.hbs: {{#if editing}} {{input class="edit" value=todo.title action="submitTodo"}} {{else}} {{input type="checkbox"

我试图通过以下方式学习ember.js。本教程向您展示了如何构建待办事项列表,但我在执行删除操作时遇到了问题。由于我是ember的新手,我不能100%确定你们需要看什么代码,但删除按钮位于
app/templates/components/todo item.hbs

{{#if editing}}
    {{input class="edit" value=todo.title action="submitTodo"}}
{{else}}
    {{input type="checkbox" checked=todo.complete class="toggle"}}
    <label class="{{if todo.complete 'completed'}}" {{action "editTodo" on="doubleClick"}}>{{todo.title}}</label>
    <button class="destroy" {{action "deleteTodo"}}></button>
{{/if}}
在app/routes/todos.js中,我有:

actions: {
    createTodo(newTitle) {**code**},
    updateTodo(todo) {
        todo.save();
    },
    deleteTodo(todo) {
        todo.destroyRecord();
    }
}
当我单击delete按钮时,什么也没有发生,以下内容显示在Ember Inspector控制台中:

请求成功:删除/todos/2

对象
(下面嵌套了很多东西)

错误:断言失败:normalizeResponse必须返回有效的JSON
API文档:*必须提供以下一个或多个密钥:
“数据”、“错误”、“元”。

我真的不确定这个错误意味着什么,所以如果有人能解释并提供一个可能的解决方案,我将非常感激


这表示发送删除请求时服务器的响应与预期不符。Ember希望您的后端符合所概述的JSON API规范。这意味着它需要一个响应,该响应包含一个JSON对象,该对象在基本级别上具有“data”、“error”或“meta”。在这种情况下,为了让Ember高兴,我建议您返回一个如下所示的对象:

 {data: {}}

这实际上只是向Ember确认对象已被删除。

您需要将此:
This.del('/todos/:id')
更改为

this.del('/todos/:id', function(db, request) {
        var id = request.params.id;
        return {
            data: {
                type: 'todos',
                id: id,
                attributs: db.todos.find(id)
            }
        };
    });

当服务器发送删除请求时,它实际响应什么?应用程序期望的服务器响应应该包含
data
属性,才能成为有效的JSON API响应。这就是错误的来源-这不是你的余烬代码本身的问题。我如何找到它?当我点击删除按钮时,我运行的终端窗口
ember-service
没有响应。假设您使用的是Chrome,右键单击并打开
inspect element
菜单。这将打开一个显示各种开发人员工具的新窗格。有一个显示所有网络活动的网络选项卡。保持打开状态,单击其中一个删除按钮,然后查看它的功能。单击该选项卡中的网络请求,它将显示详细信息。注意
预览
响应
选项卡,查看服务器返回的内容。我似乎没有从删除按钮得到任何响应。我已经检查了其他动作,它们工作正常。我不确定这有多严重,但我还提供了一个指向github存储库的链接,以防调试更容易。问题似乎在于您使用的是Ember 2,它的默认适配器(其与后端的接口方式)符合JSON API规范,但是您正在使用的ember cli mirage后端伪造程序还不能完全与之配合使用,根据-因此,您最好的选择是理解那里的mirage指南,或者告诉ember从您应用程序中的旧重新适应程序和序列化程序继承。我将此作为一个评论,因为它会给出一个半纵火的答案,但希望它能让你开始?
this.del('/todos/:id', function(db, request) {
        var id = request.params.id;
        return {
            data: {
                type: 'todos',
                id: id,
                attributs: db.todos.find(id)
            }
        };
    });