55

每个周围都有分散的解释,但我仍然不是 100% 清楚差异和用法。有人可以给我一个并排的比较吗?

{{outlet}}
{{outlet NAME}}
{{render}}
{{partial}}
{{view}}
{{control}}

注意:这篇文章对部分与渲染非常有帮助

4

4 回答 4

90

它们都是具有以下主要特征的模板助手,如 emberjs 指南中所述。( http://emberjs.com/guides/templates/rendering-with-helpers/ )

1. {{outlet}}- 根据路由器确定的路由渲染模板。根据路由使用相应的控制器和视图。这在基于路由渲染内容时很有用,这是最常见的情况

2. {{outlet NAME}}- 提供在路由中指定准确呈现内容的能力。在尝试从多个模板渲染内容时很有用 route

3. {{render}}- 类似于,outlet但控制器/视图/模型可以直接或间接地从助手指定。当需要从多个模板呈现内容并能够覆盖上下文(视图/控制器)和模型时很有用。如果指定了模型,它将使用相应控制器的唯一实例,否则它将使用单例实例。当需要覆盖路由的上下文和模型时很有用,同时呈现多个模板内容

4. {{control}}- 像渲染一样工作,除了它为每次调用使用一个新的控制器实例,而不是重用单例控制器。使用render时,如果不指定模型,就不可能对同一路线使用多个渲染,在这种情况下,control应该使用。对于为每个呈现的模板内容支持新的控制器实例很有用。

更新:控制助手已被删除https://github.com/emberjs/ember.js/commit/86eecd7ef7cdc7d2ea6f77b3a726b293292ec55d

5. {{partial}}- 将要呈现的模板作为参数,并在适当位置呈现该模板。它不会改变上下文或范围。它只是将给定的模板放到当前范围内。所以没有为部分指定视图类。当需要将模板分解为模板模块时很有用,以便更好地控制或重用,而无需创建任何视图类

6. {{view}}- 这就像部分工作,但提供了一个视图类。视图类指定要使用的模板。在将模板分解为模块但需要视图类(例如用于事件处理)时很有用。

7. {{#view}}- 还有视图助手的块形式,它允许指定子视图的模板与父视图模板内联。(http://emberjs.com/guides/views/inserting-views-in-templates/

于 2013-11-14T16:49:58.973 回答
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}}is deprecated像渲染一样工作,除了它为每个调用使用一个新的控制器实例,而不是重用单例控制器。

我只是从他们的文档中复制并粘贴了大部分内容:http: //emberjs.com/guides/templates/rendering-with-helpers/

于 2013-11-14T16:50:08.693 回答
2
  1. renderhelper 在 v2.x 中已弃用,您需要使用ember-elsewhere插件。 https://emberjs.com/deprecations/v2.x/#toc_rendering-into-a-render-helper-that-resolves-to-an-outlet
  2. ember.view在 v1.x 中已弃用,而是使用Component。参考https://emberjs.com/deprecations/v1.x/#toc_ember-view
  3. control助手只是实验性的,它已经被删除了

我想说目前只{{outlet}}鼓励一个,其余的要么被弃用/被删除。

于 2017-05-20T17:02:40.517 回答
0

主要区别是

{{view}}呈现应该可用的提供的视图类

{{partial}}呈现 Ember.TEMPLATES 中可用的模板。它可能与视图类无关。优点是父视图模板的上下文。

{{outlet}}指定应该在此处渲染提供的视图或模板的路由器,或者根据 renderTemplate() 钩子。

{{outlet NAME}}当您想在不同位置渲染两个视图/模板时很有用。您可以命名插座并要求路由器进行渲染。

{{render}}与插座相同,除非您强制路由器呈现特定的视图/模板。

于 2013-11-14T16:49:19.327 回答