删除失败后回滚模型不会更新视图

时间:2015-05-21 16:18:14

标签: ember.js ember-data

我试图通过回滚模型并将其保留在视图中来捕获并处理失败的删除请求,但我遇到了问题。我在我的控制器删除操作中获得了以下内容:

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 });
  }

});

我在Ember 1.11.1和Ember Data 1.0.0-beta.16.1

这是预期的行为,还是我错过了什么?任何信息将不胜感激!

1 个答案:

答案 0 :(得分:1)

根据我对Ember数据的了解,这是我最好的猜测

此路线的模型是一系列记录。具体来说,它可能是RecordArray的一些子类。 RecordArray可能会为您处理一些事情,例如删除数组中的记录。 (已知Ember Data会在其他地方执行此操作,就像使用FilteredRecordArray一样。)我的猜测是Ember Data足够聪明,可以在删除数组时从数组中删除记录,但不够聪明,无法将其添加回回滚时的数组。

至于如何修复它,我不是百分百肯定。 :/ / model.rollback()来电后,也许可以尝试拨打model.reload()。它不是一个解决方案,而是一个解决方法,但它可以暂时让你通过。与此同时,我将尝试重现此问题,看看它是否是Ember Data中的一个错误。