1

我正在通過Ryan LaBouve's YouTube tutorial構建使用Ember CLI構建TodoMVC應用程序。我大約過了一半,現在在模板中添加了一個條件。當雙擊一個(待辦事項列表)項時,它應該觸發一個功能editTodo,它將屬性「isEditing」設置爲true,並用輸入框替換文本。Ember CLI「Nothing Handled the Action」

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」 功能控制器(待辦事項.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

編輯:Link to GitHub issue

EDIT2:這似乎有些行爲在灰燼1.12.0之間改變(?可能是另一個bug)和1.13.0。出於某種原因,這些操作不再被物品控制器捕獲,而是直接發送到路線控制器。我不是100%確定這是爲什麼,但作爲一種修復方法,您可以降級到Ember 1.12,或者將您的editTodo操作移至您的todos控制器。

EDIT3:Link to second Github issue

EDIT4:由於在第二個bug票的建議,你也可以改變行動的目標:

<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)。在安裝之前,我清理了bower和npm緩存。 –