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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ember文档理解 - 模板是否链接到模板?相关的知识,希望对你有一定的参考价值。

我现在正在学习Ember,因为Ember的文件和入门的例子,我有点困惑。在文档中它说:

在Ember.js中,模板从控制器获取其属性,这些控制器用于装饰模型。

模板始终连接到控制器,而不是模型。

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

我在这里上传了完成的TodoMVC应用程序:https://github.com/Yannic92/stackOverflowExamples/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>

我的问题涉及第3行:

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

控制器todo只需要提供todos的动作。即使没有此控制器,也可以访问数据。在我看来有模型直接与模板连接不是吗?

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

为方便起见,Ember.js提供了代理其模型属性的控制器,以便您可以在模板中而不是{{model.name}}中说出{{name}}。

答案

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

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

如果你遗漏了itemController余烬假设todo是IndexController提供的IndexRoute模型的一部分。

默认情况下,ember有一个空控制器,它代理底层模型的所有内容。 (注意:我相信这会在ember 2.0中改变)。所以看起来它可能与模型直接耦合。但是你可以编写一个控制器,在不改变模型的情况下改变一切。

以上是关于Ember文档理解 - 模板是否链接到模板?的主要内容,如果未能解决你的问题,请参考以下文章

Ember Docs - Readonly嵌套数据

Ember 模板助手 get-value-with-key

如何在 Ember.CollectionView 中使用模板

如何在 Ember 中(重新)渲染视图模板时收到通知?

如何传递任意数据以在 Ember 模板中呈现?

如何在加载模型时在Ember中显示加载模板?