我在ember-data
(最新版),ember rc6
和库存REST控制器的应用程序中使用简单的Ember.ArrayController
。删除模型时,deleteRecord不更新ArrayController
我已经删除阵列控制器呈现的列表中每个项目旁边的操作。当某个项目被删除时,会进行适当的REST API调用,并将其从数据库中正确删除。服务器响应正确的204
响应。
这里是我的路由器设置,发现被应用于
App.CategoriesIndexRoute = Ember.Route.extend({
setupController : function(controller, model) {
this._super(controller, model);
controller.set("content", App.Category.find({
"parent": null,
}));
}
});
find筛选器如果删除find筛选器并加载所有类别,一切工作正常(项目将自动从列表中删除立即提交后)。但是,当我添加筛选器以仅显示没有父项的类别时,删除项目时不会更新列表。如果我转换到另一个部分并返回,则列表重新加载并且类别消失。
这里是deleteCategory
方法在ArrayController
:
deleteCategory: function(category) {
var transaction = this.get("store").transaction();
transaction.add(category);
category.deleteRecord();
transaction.commit();
}
这是一个ember-data
或emberjs
错误?如果不是,我在这里做错了什么?如果它是一个bug,是否有办法强制重新加载ArrayController内容后删除一个项目?或者,我可以手动从ArrayController中删除类别吗?
更新1:
我设法给力更新通过设置其内容阵列控制器的内容:
category.one("didDelete", this, function() {
this.set("content", App.Category.find({
parent: parent_category
}));
});
更新2:
这里是我正在显示的项目清单在模板中:
{{#each category in controller.content }}
<tr>
<td><a {{ action "detailCategory" category }}>{{ category.name }}</a></td>
<td><a {{ action "deleteCategory" category }}>Delete</a></td>
</tr>
{{/each}}
谢谢!
两个注释:我用其他类型的过滤器测试过,如果将任何过滤器应用于模型查询,则会失败。它只适用于没有过滤器,否则列表不会更新。我还发现了一种强制重新加载ArrayController的查询的方法,通过在删除完成后设置其内容。这会做现在,但它是一个讨厌的黑客。 –
我遇到了类似的问题。你有没有解决这个问题? –
我终于将此问题追踪到列表中每个项目旁边的复选框。每个复选框都绑定到相关对象上的一个属性,并在加载列表时触发错误事件,导致此问题。我最终删除了与它们相关的复选框和事件以解决问题。如果你需要更多的细节,我会进一步挖掘并让你知道。 –