ember.js - 如何将多个内容生成到 ember.js 组件模板中?

标签 ember.js handlebars.js htmlbars

目标是定义一种 HTML 结构,该结构具有多个由调用者声明的内容 block 。例如,标题、正文和内容。生成的标记应该是:

<header>My header</header>
<div class="body">My body</div>
<footer>My footer</footer>

实例化组件的模板将定义三个部分中的每一个:我的页眉我的正文我的页脚

使用 Ruby on Rails,您可以使用 content_for :header 从调用方捕获 header 内容,并使用 yield :header 对其进行插值。

这在 ember.js 中可能吗?

最佳答案

从 ember v1.10 开始,yield 接受参数。然而,handlebars 还不允许对变量值进行内联比较。通过在组件上定义一些属性,我们可以非常接近 Rails 的功能。

根据上面的示例,组件的模板如下所示:

<header>{{yield header}}</header>
<div class="body">{{yield body}}</div>
<footer>{{yield footer}}</footer>

组件定义会将变量参数解析为yield 语句:

export default Ember.Component.extend({
  header: {isHeader: true},
  footer: {isFooter: true},
  body:   {isBody: true}
});

这意味着 {{yield header}} 实际上为使用模板生成了一个对象 {isHeader: true}。因此我们可以使用嵌套的 if/else 结构来声明这三个部分,如下所示:

{{#my-comp as |section|}}
  {{#if section.isHeader}}
    My header
  {{else if section.isBody}}
    My body
  {{else if section.isFooter}}
    My footer
  {{/if}}
{{/my-comp}}

关于ember.js - 如何将多个内容生成到 ember.js 组件模板中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30282377/

相关文章:

ember.js - DS.Model 日期属性错误地解析日期 (YYYY-MM-DD)

javascript - CKEditor 未捕获类型错误 : Cannot call method 'unselectable' of null in EmberJS single page app with multiple editors

javascript - Handlebars 辅助函数 - 提取属性名称

javascript - Ember 每个循环加倍。使用内部每个循环变量的值绑定(bind)到外部每个循环的变量中名称相同的属性

javascript - 如何编译内联 HTMLBars 模板?

Ember.js 从 DOM 添加和删除 View ?

javascript - 我如何在 emberjs 的 Controller 中操作 dom?

javascript - Handlebars 助手的 Ember View 无法检测到自己何时被单击

javascript - 带 Handlebars 的 nodemailer 无法正确显示样式

ember.js - 使用 HTMLbars 在 ember 中编译模板客户端