我在从 Ember.JS 模型中删除记录时遇到问题。
我对车把模板中的记录进行了概述,每行都有一个删除按钮。
单击按钮时,我想从表中删除该行(并在我的 REST API 上执行 DELETE)。
我的车把模板包含下表 + 每条记录的删除按钮。
<table class="table table-hover">
<tr>
<th>Latitude</th>
<th>Longitude</th>
<th>Accuracy</th>
<th></th>
</tr>
{{#each model}}
<tr>
<td>{{latitude}}</td>
<td>{{longitude}}</td>
<td>{{accuracy}}</td>
<td><button {{action removeItem this target="view"}}>Delete</button></td>
</tr>
{{/each}}
</table>
我的观点看起来像这样
App.LocationsIndexView = Ember.View.extend({
removeItem: function(location) {
this.get('controller').send('removeItem', location);
}
});
我的控制器看起来像这样:
App.LocationsIndexController = Ember.ArrayController.extend({
removeItem: function(location) {
console.log("Removing location " + location);
location.one("didDelete", this, function() {
console.log("record deleted");
this.get("target").transitionTo("locations");
});
location.deleteRecord();
this.get("store").commit();
}
});
调用 removeItem 方法,从表中删除项目,并在 REST API 上调用 DELETE。伟大的 !
然而 ......
如果我切换到另一个模板(使用 linkTo)并返回到概览表(再次使用 linkTo),删除的记录会重新出现在表中。它不再存在于后端,因此无法再次删除:
Uncaught Error: Attempted to handle event `deleteRecord` on <App.Location:ember356:517d96d7658c51de1c000027> while in state rootState.deleted.saved. Called with undefined
我已经浏览了指南,但它们迫使您到处跳。http://emberjs.com/guides/views/看起来很有希望(实际上显示了我想要实现的删除按钮),只是为了继续完全不同的东西。
我想了解为什么删除的项目会重新出现以及如何避免这种情况。我也尝试在 ArrayController 中调用 this.removeObject(location) 但删除的记录不断重新出现。
我可以使用浏览器控制台重现该问题
- locs = App.Location.find();
- locs.content.length // 返回 5
- newLoc = App.Location.createRecord({latitude:120,longitude:120})
- locs = App.Location.find();
- locs.content.length // 返回 6
- newLoc.deleteRecord()
- locs.content.length // 返回 5
- locs = App.Location.find();
- locs.content.length // 返回 6(为什么这里返回 6?)