2015-05-21 50 views
2

我试图通过回滚模型来捕获和处理失败的删除请求,并让它保留在视图中,但我遇到了问题。我有我的控制器删除行动如下:在失败删除后回滚模型不会更新视图

model.delete(); 

model.save().then(function() { 

    alert('Deleted!'); 

}, function(err) { 

    alert('Delete failed...'); 
    model.rollback(); 

}); 

这似乎做工精细,我可以看到,该模型迅速从商店中消失,然后立刻加回,但问题是它只是不会再出现在视图中。

之前和之后删除/回滚该模型具有以下属性

isLoaded:true 
isDirty: false 
isSaving: false 
isDeleted: false 
isError: false 
isNew: false 
isValid: true 

我的模板如下:

<table> 
<thead> 
    <tr> 
    <th></th> 
    <th>Name</th> 
    <th>Number</th> 
    <th>Speed Dial</th> 
    </tr> 
</thead> 
<tbody> 

    {{#each contact in model}} 

    {{phonebook-row data=contact}} 

    {{/each}} 

</tbody> 

</table> 

最后,这里是在各自的路由模式挂钩。

export default Ember.Route.extend({ 

    model: function() { 
    return this.store.find('phonebook', { pageSize: 200 }); 
    } 

}); 

我在灰烬1.11.1和灰烬数据1.0.0-beta.16.1

这是预期的行为,还是我失去了一些东西?任何信息,将不胜感激!

+0

您是否尝试过使用一个ember组件? –

+0

你的观点是什么样子? – GJK

+0

@GJK没有看法,但将我的模板添加到原始问题 – joshfarrant

回答

1

这是我最好的猜测基于什么我知道灰烬数据:

您的这条路线模型是一组记录。具体来说,它可能是RecordArray的一些子类。 RecordArray可能会为您处理一些事情,例如删除数组中的记录。 (Ember Data已知可以在别处执行此操作,例如FilteredRecordArray。)我的猜测是,Ember Data在删除阵列时非常聪明,可以从阵列中删除记录,但当您滚动时不够聪明以将其添加回阵列回来了。

至于如何解决它,我不是100%确定。 :/拨打model.rollback()后,可能会尝试拨打model.reload()。这不是解决方法,而是解决方法,但它可以让你暂时通过。同时,我将尝试重现此问题,并查看它是否为Ember Data中的错误。

+0

听起来可能是这样,但我无法弄清楚如何实际更新视图。我在回滚之后尝试了一个.reload(),但不幸的是似乎没有任何效果。 – joshfarrant

+0

老实说,这是我在2014年离开余烬数据的3个原因之一(试图将客户端数据保持在我可以推理的状态中的常量问题)。如果你没有大量投入数据,你可以看看另外一些支持脏跟踪/回滚的方案(这些方案的痛苦/生产缺陷少得多)。下面是我写的一篇文章,我的团队通过https://github.com/toranb/ember-cli-simple-store获得了巨大的生产成功 –

相关问题