Ember.js 删除操作不起作用
我试图通过以下方式学习ember.js。本教程向您展示了如何构建待办事项列表,但我在执行删除操作时遇到了问题。由于我是ember的新手,我不能100%确定你们需要看什么代码,但删除按钮位于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"
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)
}
};
});