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

Ember.js 为什么使用itemController呈现空项的集合?,ember.js,coffeescript,emblem.js,Ember.js,Coffeescript,Emblem.js,我目前正在学习Ember,同时使用Ember cli学习todomvc教程: 我所在的部分中,为了编辑todo,需要在TodoController中添加editTodo操作。到目前为止还不错,但它还表示在每个把手帮助器上使用itemController,告诉每个todo使用特定的控制器 问题是,当我将itemController添加到模板中的每个时(使用徽章.js:each itemController='todo'),模板不再呈现集合中每个项目的标题,它只会将它们呈现为空白: 我不明白为什

我目前正在学习Ember,同时使用Ember cli学习todomvc教程:

我所在的部分中,为了编辑todo,需要在
TodoController
中添加
editTodo
操作。到目前为止还不错,但它还表示在
每个
把手帮助器上使用
itemController
,告诉每个todo使用特定的控制器

问题是,当我将
itemController
添加到模板中的
每个
时(使用徽章.js:
each itemController='todo'
),模板不再呈现集合中每个项目的标题,它只会将它们呈现为空白:

我不明白为什么会这样

模板提取 控制器提取
项目控制器必须是成员。ObjectController才能成功呈现每个项目及其关联数据。ObjectController用于装饰ArrayController中的单个项。使用“ToDoListController”ArrayController中的itemController属性声明项控制器:

    itemController: 'todo',
然后,按照参考教程中的建议创建“todo”项控制器类定义时,请注意Ember CLI“generate controller”命令将创建标准的Ember控制器。标准控制器和阵列控制器表示多个项目(如“TodosController”或“TodosListController”)。因此,TodoController应该扩展Ember.ObjectController以表示单个项:

    `import Ember from 'ember'`

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

    `export default TodoController`
与问题一起发布的标准Ember.Controller在通过“each”帮助程序传递时,无法正确显示每个单独的todo,因为标准控制器的模型引用的是“todo”类型的所有记录的筛选集,而不是特定的单个todo记录

我创建了一个示例,只需在使用Ember.Controller和使用Ember.ObjectController作为“TodoController”之间切换,即可看到标准控制器失败

此外,不是问题的原因,只是为了防止被忽略,列表项类属性声明中缺少“IsEdit:editing”:

    section#main
      ul#todo-list
        each itemController='todo'
          li class={isCompleted:completed, isEditing:editing} // <-- here
            if ...
section#main
待办事项清单
每个itemController='todo'

li class={isCompleted:completed,isEditing:editing}///只是要指出,您的代码摘录与教程完全不同。。。咖啡脚本?也许把一个jsBin或小提琴放在一起,这样我们就可以看到整个事情了。嗨@Stevoperic,我使用的是徽章和咖啡脚本,这就是为什么它看起来不同,但底层代码是sameThanks@jacefarm!我想知道你是否碰巧知道为什么把
itemController
放在
{{{each}}
对余烬不起作用?我试图完全按照教程所说的那样使用ArrayController和ObjectController,并将
itemController=“todo”
with放在{{{each}}括号中,但这不起作用,并且会给我带来一个错误,然后我按照你说的做了尝试,把它放在todosController中,这很有效……这两种方法之间有什么区别?@yeelan最好搜索答案,或者在你的问题中发布一个新问题,而不是把它放在评论中。
    `import Ember from 'ember'`

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

    `export default TodoController`
    section#main
      ul#todo-list
        each itemController='todo'
          li class={isCompleted:completed, isEditing:editing} // <-- here
            if ...