我正在从事的一个项目使用 Handlebars.js 模板系统。它读取内容并在编译模板时在适当的地方注入(inject)内容:
<div class="content">
<p>lorem ipsum</p>
{{{ content }}}
</div>
在这种情况下, Handlebars 是用一个 JS 对象编译的,该对象具有 content
属性是一串文本或 HTML(因此是三括号)。
然而,内容值(文本或 HTML)也完全有可能包含 Handlebars 插值代码:
var contentPassedToHandlebars = {
content: '<p>{{ foobar }}</p>',
foobar: 'foo'
};
当前输出 <p>{{ foobar }}</p>
但我想要得到的是 <p>foo</p>
.
handlebars 是否有用于此嵌套内容的工具或是否需要自定义帮助程序? ( {{{custom_parse content}}}
)?
对于这个问题的上下文
这种情况源自一个构建系统(metalsmith),它将文件作为 markdown 读取,将它们转换为 HTML,将结果附加到 content
file
的属性(property)对象,然后解析注入(inject) file.content
的 Handlebars 模板进入它的输出。所有这一切,我希望有一个解决方案可以将 Handlebars 或字符串插值放入 markdown 中,这样 markdown 文件就可以访问模板可以访问的相同变量(显然 config.json
中的全局值更多,而不是与关联的值正在构造的文件对象)。
最佳答案
没有内置的方法可以做到这一点。您将必须管理自己的预渲染过程或内部助手。
对于解决方案,我最终在正式渲染之前运行了预渲染。虽然代码不是 Handlebars ,而是 metalsmith-templates
插件的一部分,here is the solution I used .
粗略翻译为:
var contentPassedToHandlebars = {
content: '<p>{{ foobar }}</p>',
foobar: 'foo'
};
var x = Handlebars.compile(contentPassedToHandlebars.content)(contentPassedToHandlebars);
contentPassedToHandlebars.content = x;
Handlebars.compile(realTemplateSource)(contentPassedToHandlebars);
关于javascript - 如何深度编译嵌套的 Handlebars 内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26163053/