deleteRecord后列表未更新

时间:2013-01-13 12:24:31

标签: ember.js ember-data

我有一个ArrayController,其内容在类似的路径中定义:

App.UsersRoute = Ember.Route.extend({
  model: function() {
    return App.User.find();
  },

  setupController: function(controller, model) {
    this._super(controller, model);
    this.controllerFor('application').set('currentRoute', 'users');
  }
});

我在模板中列出数据:

<ul>
  {{#each user in arrangedContent}}
  <li>
    {{user.lastName}} {{user.firstName}}
    {{#linkTo "users.edit" user class="btn btn-primary btn-small"}}EDIT{{/linkTo}}
  </li>
  {{/each}}
</ul>

工作正常。

如果我创建了一个新项目,它会自动添加到模板中的列表中:

App.UsersNewRoute = Ember.Route.extend({
  model: function() {
    return App.User.createRecord({firstName: '', lastName: ''});
  }
});

但是当我在“编辑”视图中删除某个项目时,它不起作用:

App.UsersEditController = Ember.ObjectController.extend({
  ...

  destroy: function() {
    this.get('content').deleteRecord();
    this.get('store').commit();
    this.transitionToRoute("users.index");
  }
});

但是在“新”视图中,如果我删除新创建的项目,它就可以工作(没有提交)。

在编辑控制器中,如果我删除“提交”,则列表会更新,但当我执行其他操作时,会重新加载列表,并重新显示已删除的项目(正常)。

那么,如何删除项目?

注意:我使用ember和ember-data的“master”代码,刚刚刷新。

2 个答案:

答案 0 :(得分:2)

我在一系列不同情况下遇到了类似的问题。

我正在使用“grunt-ember-boilerplate”(强烈建议您使用CoffeeScript和Ember)。它附带了一个Ember Data版本,它有一个奇怪的错误,正确删除的记录将保留在缓存中,因此不会从列表中删除。

我没有时间弄明白究竟发生了什么事;所以我只是试着获得Ember Data的最新版本(2013-05-10 10:20:34 -0700)并立即解决了这个问题。

只需发布此处以防其他人遇到类似问题。

此外,我同意Jakub Arnold谈到不提交“商店”并使用事件监听器来确保清洁状态。就在今天,我发现了一个关于这个主题的非常有用的博客文章“Patterns and anti-patterns for Ember Data”。

答案 1 :(得分:1)

您也应该仅在删除记录后进行转换,因为提交是异步发生的。

var user = this.get("content");

user.one("didDelete", this, function() {
  this.transitionTo("users.index");
});

user.deleteRecord();
user.get("transaction").commit();

另请注意,与商店相比,优先考虑交易。如果你以后决定将记录添加到它自己的交易中,那么你将没有多少工作要做,如果你不这样做,它仍将使用与商店相同的defaultTransaction