handlebars.js - 组装:布局中的多个内容插入点?

标签 handlebars.js assemble

所有使用布局的 assemble 用户都知道“{{> body }}”标记了任何使用布局的页面的内容插入点。但是是否可以定义多个插入点,而不是将所有内容都扔到 {{> body }} 所在的位置?

例如,在我的页面中,我想定义一段特定的 javascript,但我喜欢将自定义 javascript 与 javascript 标签一起放在页面的最底部。如果它只将所有内容放在 {{> body }} 所在的位置,这是不可能的,因为脚本只会附加到内容中。

换句话说,使用 {{> script }} 甚至可自定义的标签来标记不同的插入点会很有用,并且在使用布局的页面中,这些标签是专门定义的。

以上是我理想的用例,有谁知道 assemble 是否支持这样的东西?

最佳答案

@Xavier_Ex 查看组装 Handlebars 助手仓库 https://github.com/assemble/example-layout-helpers
而这个特殊的拉取请求 https://github.com/assemble/handlebars-helpers/pull/75

大约一个月前,我们添加了一些布局助手,允许您“扩展”布局并包含不同的内容部分。请注意,您必须将布局作为部分包含在 assemble gruntfile 设置中才能正常工作...

assemble: {
  options: {
    flatten: true,
    assets: 'docs/assets',
    partials: ['src/includes/*.hbs', 'src/layouts/*.hbs'],
    layout: false,
    data: ['src/data/*.{json,yml}', 'package.json']
  },
  pages: {
    src: 'src/*.hbs',
    dest: 'docs/'
  }
}

布局(默认.hbs)...

<!DOCTYPE html>
<html lang="en">
  <head>
    {{#block "head"}}
    <meta charset="UTF-8">
    <title>{{title}} | {{site.title}}</title>
    <link rel="stylesheet" href="{{assets}}/{{stylesheet}}.css">
    <link rel="stylesheet" href="{{assets}}/github.css">
    {{/block}}
  </head>
  <body {{#is stylesheet "bootstrap"}}style="padding-top: 40px;"{{/is}}>

    {{#block "header"}}
    {{! Navbar
    ================================================== }}
    {{> navbar }}
    {{/block}}


    {{! Subhead
    ================================================== }}
    <header class="{{#is stylesheet "bootstrap"}}jumbotron {{/is}}{{#is stylesheet "assemble"}}masthead {{/is}}subhead">
      <div class="container">
        <div class="row">
          <div class="col col-lg-12">
            <h1> DOCS / {{#if title}}{{ uppercase title }}{{else}}{{ uppercase basename }}{{/if}} </h1>
          </div>
        </div>
      </div>
    </header>

    {{! Page content
    ================================================== }}
    {{#block "body"}}
    <div class="container">
      <div class="panel panel-docs">
        {{> body }}
      </div>
    </div>
    {{/block}}

    {{#block "script"}}
    <script src="{{assets}}/highlight.js"></script>
    <script src="{{assets}}/holder.js"></script>
    {{/block}}
  </body>
</html>

某页

{{#extend "default"}}
    {{#content "head"}}
        <link rel="stylesheet" href="assets/css/home.css" />
    {{/content}}

    {{#content "body"}}
        <h2>Welcome Home</h2>

        <ul>
            {{#items}}
                <li>{{.}}</li>
            {{/items}}
        </ul>
    {{/content}}

    {{#content "script"}}
        <script src="assets/js/analytics.js"></script>
    {{/content}}
{{/extend}}

希望这可以帮助。

关于handlebars.js - 组装:布局中的多个内容插入点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19800813/

相关文章:

javascript - 如何访问 Handlebars 中的 URL 参数?

handlebars.js - 如何在 Handlebars 部分中插入 html block

templates - 使用 Assemble 从循环内部访问全局变量

handlebars.js - {{#if}} 会影响上下文吗?

sass - 在 Yeoman 上使用 Bootstrap 的 Handlebars 模板引擎

javascript - 如果 "this"为空字符串,则 Handlebars 中的 {{#each this}} 不起作用

javascript - meteor 模板中的简单数据反射

node.js - 使用 Express Handlebars 注册组装 Handlebars 助手

node.js - 在部分上下文中从 Assemble 的选项对象访问自定义基本 url 属性

Meteor Block Helper 的作用就像一个模板