Ember 文档理解 - 模型是否链接到模板?

Ember Documentation understanding - Model linked to Template or not?

我现在正在学习 Ember,由于 Ember 的文档和入门示例,我有点困惑。 在文档中它说:

In Ember.js, templates get their properties from controllers, which decorate a model.

Templates are always connected to controllers, not models.

但是在完成入门指南后,我不确定这是否正确。

我已将完成的 TodoMVC 应用上传到此处:https://github.com/Yannic92/WhosebugExamples/tree/master/Ember/TodoMVC

Index.html 中,您会找到此模板:

<script type="text/x-handlebars" data-template-name="todos/index">
<ul id="todo-list">
    {{#each todo in model itemController="todo"}}
    <li {{bind-attr class="todo.isCompleted:completed todo.isEditing:editing" }}>
        {{#if todo.isEditing}}
        {{edit-todo class="edit" value=todo.title focus-out="acceptChanges" insert-newline="acceptChanges"}}
        {{else}}
        {{input type="checkbox" checked=todo.isCompleted class="toggle"}}
        <label {{action "editTodo" on="doubleClick"}}>{{todo.title}}</label>
        <button {{action "removeTodo"}} class="destroy"></button>
        {{/if}}
    </li>
    {{/each}}
</ul>
</script>

我的问题是指第三行:

{{#each todo in model itemController="todo"}}

控制器 todo 只需要为待办事项提供操作。即使没有这个控制器也可以访问数据。 在我看来,有模型直接与模板相关联吗?

或者是否有像这里提到的文档那样的默认控制器?

For convenience, Ember.js provides controllers that proxy properties from their models so that you can say {{name}} in your template rather than {{model.name}}.

正如您在这一行中看到的:<script type="text/x-handlebars" data-template-name="todos/index"> 这是 / 的模板,因为路由器有这一行:this.route('todos', { path: '/'})。它将有一个名为 TodosController 的控制器,即使您没有编写一个 ember 也会为您 生成 一个。所以当你删除它时,就会发生这种情况。

在此模板中,您将遍历待办事项列表。这些 Todo 模型中的每一个都装饰有一个控制器 TodoController。通过这一行:{{#each todo in model itemController="todo"}} 你告诉 ember 对列表中的每个元素使用这个 TodoController

如果您省略 itemController ember,则假定待办事项是 IndexRoute 提供的 IndexController 模型的一部分。

默认情况下 ember 有一个空控制器,它将所有内容代理到基础模型。 (注意:我相信这会在 ember 2.0 中改变)。所以它看起来像是直接耦合到模型。但是您可以编写一个控制器来更改所有内容 而无需 更改模型。