1

Я работаю через Ryan LaBouve's YouTube tutorial по созданию приложения TodoMVC с Ember CLI. Я примерно на полпути, добавив в шаблон условное выражение. Когда элемент (список дел) дважды щелкнут, он должен вызвать функцию editTodo, которая устанавливает свойство «isEditing» на true и заменяет текст полем ввода.Ember CLI «Ничего не обработал действие»

Функция DoubleClick не работает вообще. Он выдает следующее сообщение об ошибке в консоли:

Uncaught Error: Nothing handled the action 'editTodo'. If you did handle the action, this error can be caused by returning true from an action handler in a controller, causing the action to bubble.

Это соответствующий раздел шаблона (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

Кажется, что вы столкнулись с ошибкой, которая была введена в 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

EDIT: 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> 
+0

Спасибо. Да, я читал об устаревших компонентах. Npm не смог найти 1.13.3, но я смог перейти на v1.13.1. Я понизил его на npm и bower и последовал официальным инструкциям, чтобы понизить приложение. Тем не менее, у меня все еще такая же проблема. Я поддержал ваш ответ, потому что это имеет смысл - хотя у меня все еще есть проблемы.Функция («editTodo») в моем контроллере выше, похоже, соответствует аналогичному синтаксису в вашем jsbin. На самом деле не вижу, почему действие не обрабатывается этой функцией. –

+1

В консоли вашего браузера находится 'Ember.VERSION', фактически равное' 1.13.1'? В зависимости от вашей среды разработки может возникнуть проблема с построением/кэшированием. – GJK

+0

На самом деле консоль показывает, что я запускаю 1.13.3 (хотя я установил 1.13.1). Перед установкой я очистил кеш и npm-кеш. –

Смежные вопросы