我正在尝试按照Getting Started with Ember.js Using Ember CLI学习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/components/todo-item.js
中有删除操作,如此:
actions: {
editTodo() {**code**},
submitTodo() {**code**},
deleteTodo() {
let todo = this.get('todo');
this.sendAction('deleteTodo', todo);
}
}
在app/routes/todos.js
我有:
actions: {
createTodo(newTitle) {**code**},
updateTodo(todo) {
todo.save();
},
deleteTodo(todo) {
todo.destroyRecord();
}
}
当我点击删除按钮时,没有任何反应,以下内容显示在Ember Inspector控制台中:
Successful request: DELETE /todos/2
Object
(其中嵌套了很多东西)
Error: Assertion Failed: normalizeResponse must return a valid JSON API document: * One or more of the following keys must be present: "data", "errors", "meta".
我不确定这个错误意味着什么,所以如果有人能解释并提供可能的解决方案,我真的很感激。
答案 0 :(得分:1)
您需要更改此内容: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)
}
};
});
答案 1 :(得分:0)
这是说发送删除请求时服务器的响应不符合预期。 Ember希望您的后端符合here概述的JSON API规范。这意味着它期望具有JSON对象的响应具有&#34;数据&#34;,&#34;错误&#34;或者&#34; meta&#34;在基层。在这种情况下,为了让Ember高兴,我建议您想要返回一个看起来像这样的对象:
{data: {}}
这实际上只是向Ember确认该对象已被删除。