如何深度编译嵌套的车把内容?

Suk*_*ima 5 javascript handlebars.js metalsmith

我正在研究的项目使用Handlebars.js模板系统.它读取内容,编译模板时在适当的位置注入内容:

<div class="content">
  <p>lorem ipsum</p>

  {{{ content }}}

</div>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,把手是用JS对象编译的,JS对象的content属性是一串文本或HTML(因此是三个括号).

但是,内容值(文本或HTML)完全有可能还包括把手插值代码:

var contentPassedToHandlebars = {
  content: '<p>{{ foobar }}</p>',
  foobar: 'foo'
};
Run Code Online (Sandbox Code Playgroud)

目前哪些产出<p>{{ foobar }}</p>但我打算得到的是<p>foo</p>.

把手是否具有此嵌套内容的工具或是否需要自定义助手?({{{custom_parse content}}})?

对于这个问题的背景

这种情况来自构建系统(metalsmith),它将文件作为markdown读入,将它们转换为HTML,将结果附加到对象的content属性file,然后解析注入file.content其输出的把手模板.所有这些和我希望有一个解决方案将把手或字符串插值放入降价处,这样markdown文件就可以访问模板可以访问的相同变量(显然更多的全局值config.json不是与文件对象关联的值正在建造).

Suk*_*ima 4

没有内置的方法可以做到这一点。您必须管理自己的预渲染流程或内部助手。

对于该解决方案,我最终在官方渲染之前运行了预渲染。虽然代码不是车把而是metalsmith-templates插件的一部分,但这是我使用的解决方案

这大致翻译为:

var contentPassedToHandlebars = {
  content: '<p>{{ foobar }}</p>',
  foobar: 'foo'
};

var x = Handlebars.compile(contentPassedToHandlebars.content)(contentPassedToHandlebars);
contentPassedToHandlebars.content = x;

Handlebars.compile(realTemplateSource)(contentPassedToHandlebars);
Run Code Online (Sandbox Code Playgroud)