Ember CLI“没有处理行动”

时间:2015-09-14 00:09:02

标签: javascript model-view-controller ember.js ember-cli handlebars.js

我正在通过Ryan LaBouve's YouTube tutorial使用Ember CLI构建TodoMVC应用程序。我已经走了一半,现在在模板中添加一个条件。当双击(待办事项列表)项目时,它应该触发一个函数 editTodo ,它将属性“isEditing”设置为 true ,并用输入替换文本框。

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

  

未捕获错误:没有处理动作'editTodo'。如果您确实处理了该操作,则可以通过从控制器中的操作处理程序返回true来导致此错误,从而导致操作冒泡。

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

      <section id="main">
        <ul id="todo-list">
          {{#each todo in model itemComtroller="todo"}}
            <li {{bind-attr class="todo.isCompleted:completed todo.isEditing:editing"}}>
              {{#if todo.isEditing}}
              <input class="edit">
              {{else}}
                {{input type="checkbox" class="toggle" checked=todo.isCompleted}}
                <label {{action "editTodo" on="doubleClick"}}>{{todo.title}}</label><button class="destroy"></button>
              {{/if}}
            </li>
          {{/each}}
        </ul>

        <input type="checkbox" id="toggle-all">
      </section>

以下是具有“editTodo”功能的控制器( todo.js ):

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')
});

我已经使用视频和相关的Github repo交叉引用了我的代码,但仍无法找到问题的原因。关于SO还有相关的问题,但我没有看到这样的问题。显然我是Ember.js的新手,可以使用我能得到的所有帮助。

谢谢!

1 个答案:

答案 0 :(得分:1)

您似乎遇到了Ember 1.13.4中引入的错误。我不确定它是什么,但它与使用项目控制器并在循环中执行操作有关。目前,您可以降级到Ember 1.13.3或更低以解决问题。我将提交一份错误报告,以便在以后的Ember版本中修复。

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

几乎忘了:

Code that works in 1.13.3

Same code broken in 1.13.4

编辑:Link to GitHub issue

EDIT2:似乎在Ember(可能是另一个错误?)之间的某些行为已经在1.12.0和1.13.0之间发生了变化。由于某种原因,操作不再被捕获在项目控制器中,而是直接发送到路径控制器。我并非100%确定原因,但作为修复,您可以降级为Ember 1.12或将editTodo操作移至todos控制器。

EDIT3:Link to second Github issue

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

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