Javascript 余烬CLI“;没有人处理这一行动”;
我正在使用Ember CLI构建TodoMVC应用程序。我已经完成了一半,现在在模板中添加了一个条件。双击(待办事项列表)项时,应触发函数editTodo,该函数将属性“IsEdit”设置为true,并用输入框替换文本 双击功能根本不起作用。它在控制台中抛出以下错误: 未捕获错误:未处理操作“Editodo”。如果确实处理了该操作,则此错误可能是由于从控制器中的操作处理程序返回true而导致该操作冒泡 这是相关的模板部分(todos.hbs): 我已经将我的代码与视频和相关的文档交叉引用,但仍然找不到问题的原因。在这方面也有相关的问题,但我还没有看到像这样的问题。显然,我是新加入Ember.js的,可以利用我能得到的所有帮助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 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>