如何使用基于开发/构建上下文的Assemble包含不同的内容部分?

时间:2014-02-03 06:53:21

标签: gruntjs handlebars.js assemble grunt-assemble

我跳进assemble / Grunt尝试改进我为我使用的CMS创建模板的工作流程。我想弄清楚的是:是否可以在开发时(即在“grunt watch”期间)在我的模板中使用块/部分HTML内容,但是然后用我在CMS中需要的include标记替换它最终的HTML输出(即当我做“grunt build”时)。像下面这样的东西?

<div id="content">
{{! if in dev context, include this partial }}
{{#if}}
  {{> body }}
{{! if in build context, include this partial }}
{{else}}
  {{> body-cms-tag }}
{{/if}}
</div>

如果在dev / watch模式下,将输出

<div id="content">
  <h1>Test Headline</h1>
  <p>This is just test content.</p>
</div<

但在构建模式下,会输出

<div id="content">
  <?php echo $mContext['bodyElements']; ?>
</div>

这可能是使用Handlebars语法,汇编助手还是Grunt任务(类似于grunt-usemin?)

1 个答案:

答案 0 :(得分:3)

您可以在数据或汇编选项中添加标记,并在if语句中检查该标记的值:

Gruntfile.js

assemble: {
  options: {
    production: false
  },
  files: { ... }
}

page.hbs

<div id="content">
{{! if in dev context, include this partial }}
{{#if production}}
  {{> body }}
{{! if in build context, include this partial }}
{{else}}
  {{> body-cms-tag }}
{{/if}}
</div>

目前,如果你想在某个帮助器中找到production标志,或者想要改变上下文级别的部分,你将不得不使用类似../production的东西,这可能很痛苦。但是,Handlebars.js有一个版本(希望很快)的功能,可以让你从任何级别@root.production。这已合并,但尚未发布。当它发布时,我们将更新到该版本。

希望这有帮助。