2013-07-02 57 views
6

我在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-dataemberjs错误?如果不是,我在这里做错了什么?如果它是一个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}} 

谢谢!

+0

两个注释:我用其他类型的过滤器测试过,如果将任何过滤器应用于模型查询,则会失败。它只适用于没有过滤器,否则列表不会更新。我还发现了一种强制重新加载ArrayController的查询的方法,通过在删除完成后设置其内容。这会做现在,但它是一个讨厌的黑客。 –

+0

我遇到了类似的问题。你有没有解决这个问题? –

+0

我终于将此问题追踪到列表中每个项目旁边的复选框。每个复选框都绑定到相关对象上的一个属性,并在加载列表时触发错误事件,导致此问题。我最终删除了与它们相关的复选框和事件以解决问题。如果你需要更多的细节,我会进一步挖掘并让你知道。 –

回答

0

这不再是在Ember Data中做事情的方式。可以在转换文档中看到:https://github.com/emberjs/data/blob/master/TRANSITION.md

+0

我删除了我的问题,我不能接受你的问题,因为我不是那个问你:)你应该错误Taylan Pince ... – intuitivepixel

+0

是的,每个评论都“错误”了OP,如果我理解了堆栈正确的溢出。 ..我不知道你指的是什么问题,对不起,但都好:)堆栈溢出是烦人的,如果你想清除旧的东西,我发现。 “回答”表示“回答并接受了该答案”。 –