3

我一直在关注 ember 的入门指南。

我来到了处理编辑删除项目的部分,并且遇到了一个似乎出现在 chrome 但不是 Firefox 的问题。

自定义组件“edit-todo”有 2 个事件链接到动作“acceptChanges”

{{#if isEditing}}
  {{edit-todo class="edit" value=title focus-out="acceptChanges" insert-newline="acceptChanges"}}
{{else}}


如果项目的标题为空,“acceptChanges”操作会触发“removeTodo”操作

acceptChanges: function () {
  this.set('isEditing', false);

  if (Ember.isEmpty(this.get('model.title'))) {
    this.send('removeTodo');
  } else {
    this.get('model').save();
  }
},
removeTodo: function () {
  var todo = this.get('model');
  todo.deleteRecord();
  todo.save();
}

如果您编辑一个项目,删除文本并按下回车键或切换焦点,该项目将被删除。这在 Firefox 中非常适合我。

但是,在 Chrome 中,如果您删除标题并按 enter ,则 acceptChanges 操作会触发两次。当 DOM 更新以移除项目时,acceptChanges 操作会再次触发,可能是因为它失去了焦点。

这个 jsbin显示了问题,它本质上只是指南中的代码和一些控制台日志。如果您编辑项目“BBB”,删除文本并按回车,“CCC”的数据也将被删除。它保留在 DOM 中,但您不能再与该项目交互,并且剩余项目计数错误。如果您在开发人员工具中打开 ember 检查器,您可以看到唯一剩下的数据是“AAA”项。

我想知道这是否是 ember、ember-data、chrome 的错误,还是我应该在我的 js 中检查的预期行为?

我正在使用 Chrome 版本 26.0.1410.63

4

0 回答 0