2

我正在使用 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删除记录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}}

模板输出:

Title   Facts           Actions
asdfsd  asdfsadf    View | Delete[46](rootState.loaded.saved)
asdfsd  asdfsadf    View | Delete[47](rootState.loaded.saved)
asdfsd  asdfsadf    View | Delete[48](rootState.loaded.saved)

控制台中的输出:

单击带有 Fact Id 46 的记录删除记录到通过 id 46 的 yes 函数的控制台。记录从模板显示的列表中消失,留下 id 为 47 和 48 的两条记录。单击记录 47 的删除会在日志中显示记录 id 46 再次通过。

4

1 回答 1

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

你的事实控制器:

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

你的事实控制器:

FactController = Ember.ObjectController.extend({
  deleteFact: function() {
    self.get('content').deleteRecord();        
    self.get('content.transaction').commit();
  }
});
于 2013-04-23T15:13:54.613 回答