首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么使用itemController呈现空项的集合?

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

Stack Overflow用户
提问于 2014-09-24 03:21:37
回答 1查看 599关注 0票数 5

目前,我正在学习Ember,同时,我还在学习todomvc教程,其中包含了http://thetechcofounder.com/getting-started-with-ember-js-using-ember-cli/ -cli:

我所在的部分中,为了编辑待办事项,需要将editTodo操作添加到TodoController中。到目前为止还不错,但是它还说要在each车把上使用each助手,告诉每个人使用一个特定的控制器。

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

我不明白为什么会这样。

模板提取

代码语言:javascript
复制
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'

控制器提取

代码语言:javascript
复制
`import Ember from 'ember'`

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

`export default TodoController`
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-28 06:39:29

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

代码语言:javascript
复制
    itemController: 'todo',

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

代码语言:javascript
复制
    `import Ember from 'ember'`

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

    `export default TodoController`

与问题一起发布的标准Ember.Controller在通过“每个”助手传递时未能正确显示每个待办事项,因为标准控制器的模型引用的是一组经过过滤的“todo”类型的记录,而不是一个特定的单一待办事项记录。

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

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

代码语言:javascript
复制
    section#main
      ul#todo-list
        each itemController='todo'
          li class={isCompleted:completed, isEditing:editing} // <-- here
            if ...
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26007998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档