为什么使用itemController呈现空项的集合?

bru*_*077 5 coffeescript ember.js emblem.js

我正在学习Ember,同时遵循ember-cli的todomvc教程:http://thetechcofounder.com/getting-started-with-ember-js-using-ember-cli/

我在编辑待办事项的部分,需要添加editTodo动作TodoController.到目前为止一切都那么好,但它也说要itemControllereach把手助手上使用,告诉每个待办事项使用特定的控制器

在此输入图像描述.

问题是,当我添加itemControllereach模板(使用Emblem.js: each itemController='todo'),模板不再呈现在集合中的每个项目的标题,它只是使他们的空白:

在此输入图像描述

我不明白为什么会这样.

模板提取

section#main
  ul#todo-list
    each
      li class={isCompleted:completed}
        if isEditing
          input.edit
        else
          = input class='toggle' type='checkbox' checked=isCompleted
          label{action 'editTodo' on='doubleClick'}= title
          button.destroy
  input#toggle-all type='checkbox'
Run Code Online (Sandbox Code Playgroud)

控制器提取

`import Ember from 'ember'`

TodoController = Ember.Controller.extend
  actions:
    editTodo: ->
      @set 'isEditing', true

`export default TodoController`
Run Code Online (Sandbox Code Playgroud)

jac*_*arm 4

项目控制器必须是Ember.ObjectController才能成功呈现每个项目及其关联数据。ObjectController 用于装饰 ArrayController 中的各个项目。使用“TodosListController”ArrayController 中的 itemController 属性来声明项目控制器:

\n\n
    itemController: \'todo\',\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后,当按照参考教程中的建议创建“todo”项目控制器类定义时,观察 Ember CLI“生成控制器”命令将创建一个标准的 Ember 控制器。标准控制器和ArrayController代表多个项目(如“TodosController”或“TodosListController”)。因此,TodoController 应该扩展 Ember.ObjectController 来表示单个项目:

\n\n
    `import Ember from \'ember\'`\n\n    TodoController = Ember.ObjectController.extend\n      actions:\n        editTodo: ->\n          @set \'isEditing\', true\n\n    `export default TodoController`\n
Run Code Online (Sandbox Code Playgroud)\n\n

与问题一起发布的标准 Ember.Controller 在通过“each”帮助器传递时无法正确显示每个单独的待办事项,因为标准控制器的模型正在引用类型的所有记录的过滤集\'todo\',而不是特定的单个待办事项记录。

\n\n

我\xe2\x80\x99创建了一个JS Bin来说明 - 只需在使用 Ember.Controller 和使用 Ember.ObjectController 之间切换“TodoController”,即可看到标准控制器失败。

\n\n

另外,这不是问题的原因,但为了防止它被忽略,列表项类属性声明中缺少 \xe2\x80\x98isEditing:editing\xe2\x80\x99 :

\n\n
    section#main\n      ul#todo-list\n        each itemController=\'todo\'\n          li class={isCompleted:completed, isEditing:editing} // <-- here\n            if ...\n
Run Code Online (Sandbox Code Playgroud)\n