我正在学习Ember,同时遵循ember-cli的todomvc教程:http://thetechcofounder.com/getting-started-with-ember-js-using-ember-cli/
我在编辑待办事项的部分中,需要在editTodo
中添加TodoController
操作。到目前为止一直很好,但它也说在itemController
把手助手上使用each
告诉每个待办事项使用特定的控制器
。
当我在模板中添加itemController
到each
时(使用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'
`import Ember from 'ember'`
TodoController = Ember.Controller.extend
actions:
editTodo: ->
@set 'isEditing', true
`export default TodoController`
答案 0 :(得分:4)
项目控制器必须是 Ember.ObjectController 才能成功呈现每个项目及其关联数据。 ObjectControllers用于装饰ArrayController中的各个项目。使用' TodosListController'中的itemController属性。 ArrayController声明项目控制器:
itemController: 'todo',
然后,当创建' todo'项目控制器类定义如参考教程中所建议的那样,观察Ember CLI'生成控制器'命令将创建一个标准的Ember控制器。标准控制器和ArrayControllers代表多个项目(例如' TodosController'或者#TodosListController')。因此,TodoController应该扩展Ember.ObjectController以表示单个项目:
`import Ember from 'ember'`
TodoController = Ember.ObjectController.extend
actions:
editTodo: ->
@set 'isEditing', true
`export default TodoController`
标准的Ember.Controller,与问题一起发布,无法正确显示每个单独的待办事项,当通过'每个'帮助器,因为标准控制器的模型引用了所有类型的记录的过滤集合,而不是特定的单个待办事项记录。
我已经创建了一个JS Bin来说明 - 只需在使用Ember.Controller和使用Ember.ObjectController进行' TodoController'之间切换,看看标准控制器是否失败。
此外,不是问题的原因,但是如果它被忽略了,list-item类属性声明中缺少'isEditing:editing':
section#main
ul#todo-list
each itemController='todo'
li class={isCompleted:completed, isEditing:editing} // <-- here
if ...