我正在使用Ember Data的第12版。
我在ArrayController
上有一个简单的方法试图删除单个记录,并从模板中的动作调用:
deleteFact: function(fact) {
self=this;
window.App.confirm(Em.I18n.t('Delete fact?'), {
yes: function() {
fact.deleteRecord();
fact.store.commit();
}
});
}
这总是适用于删除的第一条记录,列表显示记录消失。我正在使用Rails,服务器处理DELETE
并返回一个JSON空对象和status 200
。如果我在第一次删除后的任何时候删除了另一条记录,我总会立即抛出内部异常:
Uncaught Error: Attempted to handle event
{deleteRecord {1}}
删除记录的正确方法是什么。我搜索过谷歌并且找不到任何答案,而且对于余烬数据的源代码和测试看起来就像这样就必须要做。
模板:
on <App.Fact:ember402:31> while in state rootState.deleted.saved. Called with undefined
模板输出:
{{#each fact in content}}
<tr>
<td>{{fact.title}}</td>
<td>{{fact.body}}</td>
<td>{{#linkTo 'facts.show' fact}}View{{/linkTo}} | <a {{ action 'deleteFact' fact}} class="button small deny delete-button">Delete</a>[{{fact.id}}]({{fact.stateManager.currentState.path}})</td>
</tr>
{{else}}
<tr>
<td colspan='4'>No facts registered at present.</td>
</tr>
{{/each}}
控制台输出:
使用Fact Id 46在记录上单击删除,从传递了id 46的yes函数登录到控制台。记录从模板显示的列表中消失,留下两个id为47和48的记录。单击删除记录47,在日志中显示记录ID 46再次通过。
答案 0 :(得分:1)
这应该可以正常工作。
我的猜测是你继续删除相同的记录。似乎deleteFact
使用相同的fact
调用{。}}。
更新(尝试修复模板)
{{#each fact in controller}}
<tr>
<td>{{title}}</td>
<td>{{body}}</td>
<td>{{#linkTo 'facts.show'}}View{{/linkTo}} | <a {{ action 'deleteFact'}} class="button small deny delete-button">Delete</a></td>
</tr>
{{else}}
<tr>
<td colspan='4'>No facts registered at present.</td>
</tr>
{{/each}}
Your FactsController:
FactsController = Ember.ArrayController.extend({
itemController: 'fact'
});
您的FactController:
FactController = Ember.ObjectController.extend({
deleteFact: function() {
self.get('content').deleteRecord();
self.get('content.transaction').commit();
}
});