【问题标题】:Ember Documentation understanding - Model linked to Template or not?Ember 文档理解 - 模型是否链接到模板?
【发布时间】:2015-06-03 08:50:14
【问题描述】:

我现在正在学习 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 只需要为待办事项提供操作。即使没有此控制器,也可以访问数据。 在我看来,模型与模板直接相关不是吗?

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

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

【问题讨论】:

    标签: javascript templates ember.js model


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 您好,感谢您的回答,如果我的问题听起来很愚蠢,但您说我循环浏览了待办事项列表,我们深表歉意。那么这个列表是在控制器的模型中提供的呢?那么哪个控制器包含这个模型呢?因为我可以删除 TodosController 和 TodoController 并且仍然可以访问 todos 列表。
    • 没有愚蠢的问题 :) 我会更新问题并尝试进一步解释。
    • 谢谢。我已经推送了一个没有控制器的版本,因此您可以在这里查看:github.com/iQuote/stackOverflowExamples/blob/master/Ember/… 我无法再访问这些功能,但仍然可以访问待办事项列表
    • 谢谢。 “它将有一个名为 TodosController 的控制器,即使你没有编写一个 ember 也会为你生成一个。所以当你删除它时,就会发生这种情况。”这对我帮助很大。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多