每个周围都有分散的解释,但我仍然没有100%清楚差异和差异。用法。有人可以给我一个并排比较吗?
{{outlet}}
{{outlet NAME}}
{{render}}
{{partial}}
{{view}}
{{control}}
注意:this post对部分vs渲染
非常有帮助答案 0 :(得分:84)
它们都是模板助手,具有以下主要特征,如emberjs指南中所述。 (http://emberjs.com/guides/templates/rendering-with-helpers/)
1. {{outlet}}
- 根据路由器确定的路由呈现模板。基于该路由,使用相应的控制器和视图。 这在基于路线呈现内容时很有用,这是最常见的情况。
2. {{outlet NAME}}
- 提供在路线中指定准确呈现内容的功能。 在尝试从路径的多个模板中呈现内容时很有用。
3. {{render}}
- 与outlet
类似,但控制器/视图/模型可以直接或间接地从帮助程序指定。当需要从多个模板呈现内容并且能够覆盖上下文(视图/控制器)和模型时非常有用。如果指定了model,它将使用相应控制器的唯一实例,否则将使用单例实例。 在需要覆盖路线的上下文和模型时有用,同时渲染多个模板内容。
4. {{control}}
- 像渲染一样工作,除了它为每个调用使用一个新的控制器实例,而不是重用单例控制器。使用render
时,如果不指定模型,则无法对同一路径使用多个渲染,因此应使用control
。 用于为每个呈现的模板内容支持控制器的新实例。
更新:控件助手已被移除https://github.com/emberjs/ember.js/commit/86eecd7ef7cdc7d2ea6f77b3a726b293292ec55d。
5. {{partial}}
- 将模板渲染为参数,并将模板渲染到位。它不会改变背景或范围。它只是将给定的模板与当前范围放在一起。因此没有为partial指定视图类。 当需要将模板分解为模板模块,以便更好地控制或重用,而无需创建任何视图类时非常有用。
6. {{view}}
- 这部分工作,但提供了一个视图类。 view类指定要使用的模板。 将模板分解为模块但需要视图类时非常有用用于事件处理。
7. {{#view}}
- 还有视图助手的块形式,它允许指定与父视图模板内联的子视图的模板。 (http://emberjs.com/guides/views/inserting-views-in-templates/)
答案 1 :(得分:9)
{{outlet}}
这定义了嵌套资源/路由将在路径模板中呈现的位置
{{outlet NAME}}
这会创建一个命名插座,您可以在其中以编程方式将某些内容呈现为
App.PostRoute = App.Route.extend({
renderTemplate: function() {
this.render('favoritePost', { // the template to render
into: 'posts', // the route to render into
outlet: 'posts', // the name of the outlet in the route's template
controller: 'blogPost' // the controller to use for the template
});
this.render('comments', {
into: 'favoritePost',
outlet: 'comment',
controller: 'blogPost'
});
}
});
{{render}}
有两个参数:
第一个参数描述了要设置的上下文 可选的第二个参数是一个模型,如果提供
,它将被传递给控制器 {{render}}
做了几件事:
当没有提供模型时,它获取相应控制器的单例实例 提供模型时,它会获得相应控制器的唯一实例 使用此控制器呈现命名模板 设置相应控制器的模型
{{partial}}
将模板呈现为参数,并将该模板放置到位(使用当前范围作为上下文)。
{{view}}
此帮助程序的工作方式与部分帮助程序类似,除了提供要在当前模板中呈现的模板之外,您提供了一个视图类。视图控制渲染的模板。
{{control}}
已弃用的工作方式与渲染类似,不同之处在于它为每次调用使用新的控制器实例,而不是重复使用单例控制器。
我刚从他们的文档中复制并粘贴了大部分内容:http://emberjs.com/guides/templates/rendering-with-helpers/
答案 2 :(得分:2)
render
helper在v2.x中已弃用,您需要使用ember-elsewhere插件。 https://emberjs.com/deprecations/v2.x/#toc_rendering-into-a-render-helper-that-resolves-to-an-outlet ember.view
在v1.x中已弃用,而是使用Component。参考https://emberjs.com/deprecations/v1.x/#toc_ember-view control
助手只是实验性的,已经删除了我想说目前只鼓励{{outlet}}
,其余的都被弃用/删除。
答案 3 :(得分:0)
主要区别是
{{view}}
呈现应提供的提供的视图类
{{partial}}
在Ember.TEMPLATES中呈现模板。它可能没有相关的视图类。优势是父视图的模板保留的上下文。
{{outlet}}
指定应在此处呈现提供的视图或模板的路由器,或者根据renderTemplate()钩子指定路由器。
{{outlet NAME}}
非常有用。您可以命名插座并要求路由器进行渲染。
{{render}}
与outlet相同,除非您强制路由器呈现特定的视图/模板。