Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.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
Javascript 余烬CLI“;没有人处理这一行动”;_Javascript_Model View Controller_Ember.js_Ember Cli_Handlebars.js - Fatal编程技术网

Javascript 余烬CLI“;没有人处理这一行动”;

Javascript 余烬CLI“;没有人处理这一行动”;,javascript,model-view-controller,ember.js,ember-cli,handlebars.js,Javascript,Model View Controller,Ember.js,Ember Cli,Handlebars.js,我正在使用Ember CLI构建TodoMVC应用程序。我已经完成了一半,现在在模板中添加了一个条件。双击(待办事项列表)项时,应触发函数editTodo,该函数将属性“IsEdit”设置为true,并用输入框替换文本 双击功能根本不起作用。它在控制台中抛出以下错误: 未捕获错误:未处理操作“Editodo”。如果确实处理了该操作,则此错误可能是由于从控制器中的操作处理程序返回true而导致该操作冒泡 这是相关的模板部分(todos.hbs): 我已经将我的代码与视频和相关的文档交叉引用,但仍然

我正在使用Ember CLI构建TodoMVC应用程序。我已经完成了一半,现在在模板中添加了一个条件。双击(待办事项列表)项时,应触发函数editTodo,该函数将属性“IsEdit”设置为true,并用输入框替换文本

双击功能根本不起作用。它在控制台中抛出以下错误:

未捕获错误:未处理操作“Editodo”。如果确实处理了该操作,则此错误可能是由于从控制器中的操作处理程序返回true而导致该操作冒泡

这是相关的模板部分(todos.hbs):

我已经将我的代码与视频和相关的文档交叉引用,但仍然找不到问题的原因。在这方面也有相关的问题,但我还没有看到像这样的问题。显然,我是新加入Ember.js的,可以利用我能得到的所有帮助


谢谢

您似乎遇到了一个在Ember 1.13.4中引入的bug。我不确定它是什么,但它与使用项目控制器和在循环中有一个动作有关。现在,您可以降级到Ember 1.13.3或更低版本来解决此问题。我将提交一个bug报告,以便在以后版本的余烬中修复

从长远来看,您不会像这样编写代码。在Ember 2.0中,项目控制器已被完全删除,因此在使用Ember 2.0时,您可能会切换到使用组件来解决这种情况。现在,您可以练习使用Ember 1.13.3

差点忘了:

编辑:

EDIT2:似乎在1.12.0和1.13.0之间,余烬中的某些行为发生了变化(可能是另一个bug?)。由于某些原因,操作不再在item controller中捕获,而是直接发送到route controller。我不能100%确定这是为什么,但作为修复,您可以降级到Ember 1.12,或者将您的
editTodo
操作移动到
todos
控制器

编辑3:

EDIT4:正如第二个错误通知单中所建议的,您还可以更改操作的目标:

 <label {{action "editTodo" on="doubleClick" target="todo"}}>{{todo.title}}</label>
{{todo.title}

谢谢。是的,我读过关于组件被弃用的报道。Npm找不到1.13.3,但我可以降级到v1.13.1。我在npm和bower上对其进行了降级,并按照官方指示对该应用进行了降级。然而,我仍然有同样的问题。我对你的答案投了更高的票,因为这是有道理的——尽管我仍然有问题。上面我的控制器中的函数(“editto”)似乎遵循与jsbin中类似的语法。真的看不出为什么该功能不处理操作。在浏览器的控制台中,
Ember.VERSION
实际上等于
1.13.1
?根据您的开发环境,可能存在某种构建/缓存问题。实际上,控制台显示我正在运行1.13.3(尽管我安装了1.13.1)。我在安装之前清理了bower和npm缓存。我可能发现了另一个bug。我已经用下一步更新了答案。@GTK感谢您的帮助。Npm无法获得1.12版本,事实上我已经检查过了,我正在学习的教程使用了1.7.0版本(Npm也没有提供)。我在1.13.3中尝试了上述解决方案(编辑4),但未捕获错误:在root.load.saved状态下尝试处理事件
editTodo
on。在1.13.1之前,npm的下一个可用版本是0.2.7,所以我尝试了使用该版本的应用程序,但有太多的不一致。我将继续尝试使用您提供的解决方案组合版本。
import Ember from 'ember';

export default Ember.ObjectController.extend({
  actions: {
    editTodo: function() {
      this.set('isEditing', true);
    }
  },
  isEditing: false,
  isCompleted: function(key, value) {
    var model = this.get('model');

    if (value === undefined ) {
      return model.get('isCompleted');
    } else {
      model.set('isCompleted', value);
      model.save();
      return value;
    }
  }.property('model.isCompleted')
});
 <label {{action "editTodo" on="doubleClick" target="todo"}}>{{todo.title}}</label>