Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js ToDoMVC-多次触发ObjectController操作_Ember.js_Todomvc - Fatal编程技术网

Ember.js ToDoMVC-多次触发ObjectController操作

Ember.js ToDoMVC-多次触发ObjectController操作,ember.js,todomvc,Ember.js,Todomvc,我一直在遵循余烬指南 我谈到了处理和项目的部分,遇到了一个问题,它似乎出现在chrome中,而不是firefox中 自定义组件“编辑todo”有两个事件链接到操作“acceptChanges” 如果项目标题为空,“acceptChanges”操作将触发“removeTodo”操作 acceptChanges: function () { this.set('isEditing', false); if (Ember.isEmpty(this.get('model.title')))

我一直在遵循余烬指南

我谈到了处理和项目的部分,遇到了一个问题,它似乎出现在chrome中,而不是firefox中

自定义组件“编辑todo”有两个事件链接到操作“acceptChanges”


如果项目标题为空,“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();
}
如果编辑项目、删除文本并按enter键或切换焦点,则项目将被删除。这在Firefox中非常适合我

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

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

我想知道这是不是余烬的bug,余烬数据的bug,chrome的bug,还是我应该在js中检查的预期行为


我正在使用Chrome 26.0.1410.63版

对我来说,这看起来像是意外行为。在我的TodoMVC应用程序中,我也遇到了同样的情况(我只是没有意识到)。此外,您不能在之前删除的项目之后编辑该项目(在firefox中一切正常)。只需在Chrome版本30.0.1599.101 m的我的windows box上进行测试。同样的结果。这个问题在github上的ember.js中作为一个问题被提出:@rpcutts你能找到解决这个问题的方法吗?或者这是ember/Chrome的一个bug?我也遇到了同样的问题——Firefox和IE-11的一切都很好。是的,这是一个bug。“removeTodo”操作在同一运行循环中发送两次。在TodoMVC.com版本中,我们这样处理:
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();
}