ember.js + handlebars:渲染vs出口vs部分vs视图与控制

dou*_*ack 53 javascript handlebars.js ember.js

每个周围都有分散的解释,但我仍然没有100%明确差异和用法.有人可以给我一个并排比较吗?

{{outlet}}
{{outlet NAME}}
{{render}}
{{partial}}
{{view}}
{{control}}
Run Code Online (Sandbox Code Playgroud)

注意:这篇文章对部分vs渲染很有帮助

mel*_*elc 85

它们都是模板助手,具有以下主要特征,如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/)


Kin*_*n2k 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'
    });
  }
});
Run Code Online (Sandbox Code Playgroud)

{{render}} 有两个参数:

第一个参数描述要设置的上下文可选的第二个参数是一个模型,如果提供,它将传递给控制器

{{render}} 做了几件事:

当没有提供模型时,它获取相应控制器的单例实例当提供模型时,它获取相应控制器的唯一实例使用此控制器呈现命名模板设置相应控制器的模型

{{partial}} 将模板呈现为参数,并将该模板放置到位(使用当前范围作为上下文).

{{view}}此帮助程序的工作方式类似于部分帮助程序,除了提供要在当前模板中呈现的模板之外,您提供了一个视图类.视图控制呈现的模板.

{{control}}弃用的作品喜欢渲染,但它采用了新的控制器实例每次调用,而不是重用的单控制器.

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