在Ember Data修订版12中删除记录的正确方法是什么?

时间:2013-04-23 01:48:20

标签: ruby-on-rails ruby json ember-data

我正在使用Ember Data的第12版。

我在ArrayController上有一个简单的方法试图删除单个记录,并从模板中的动作调用:

deleteFact: function(fact) {
  self=this;
  window.App.confirm(Em.I18n.t('Delete fact?'), {
    yes: function() {
      fact.deleteRecord();
      fact.store.commit();
    }
  });
}

这总是适用于删除的第一条记录,列表显示记录消失。我正在使用Rails,服务器处理DELETE并返回一个JSON空对象和status 200。如果我在第一次删除后的任何时候删除了另一条记录,我总会立即抛出内部异常:

Uncaught Error: Attempted to handle event {deleteRecord {1}}

删除记录的正确方法是什么。我搜索过谷歌并且找不到任何答案,而且对于余烬数据的源代码和测试看起来就像这样就必须要做。

模板:

on <App.Fact:ember402:31> while in state rootState.deleted.saved. Called with undefined

模板输出:

{{#each fact in content}}
  <tr>
      <td>{{fact.title}}</td>
      <td>{{fact.body}}</td>
      <td>{{#linkTo 'facts.show' fact}}View{{/linkTo}} | <a {{ action 'deleteFact' fact}} class="button small deny delete-button">Delete</a>[{{fact.id}}]({{fact.stateManager.currentState.path}})</td>
  </tr>
  {{else}}
  <tr>
    <td colspan='4'>No facts registered at present.</td>
  </tr>
{{/each}}

控制台输出:

使用Fact Id 46在记录上单击删除,从传递了id 46的yes函数登录到控制台。记录从模板显示的列表中消失,留下两个id为47和48的记录。单击删除记录47,在日志中显示记录ID 46再次通过。

1 个答案:

答案 0 :(得分:1)

这应该可以正常工作。

我的猜测是你继续删除相同的记录。似乎deleteFact使用相同的fact调用{。}}。

更新(尝试修复模板)

{{#each fact in controller}}
  <tr>
      <td>{{title}}</td>
      <td>{{body}}</td>
      <td>{{#linkTo 'facts.show'}}View{{/linkTo}} | <a {{ action 'deleteFact'}} class="button small deny delete-button">Delete</a></td>
  </tr>
  {{else}}
  <tr>
    <td colspan='4'>No facts registered at present.</td>
  </tr>
{{/each}}

Your FactsController:

FactsController = Ember.ArrayController.extend({
  itemController: 'fact'
});

您的FactController:

FactController = Ember.ObjectController.extend({
  deleteFact: function() {
    self.get('content').deleteRecord();        
    self.get('content.transaction').commit();
  }
});