【发布时间】:2016-07-28 06:57:15
【问题描述】:
我正在尝试让我的 metalsmith 设置正常工作,没什么特别的。
在我的build.js 我有:
…
handlebars.registerHelper('doctype', function() {
return new handlebars.SafeString('<!DOCTYPE html>');
});
…
在我的部分模板header.hbt 我有:
{{doctype}}
<html>
…
结果 html 以:
<p>&lt;!DOCTYPE html&gt;</p>
——这显然不是我需要的。
有什么建议吗?
附言。在我的布局文件中使用普通的 doctype 定义具有相同的效果。使用handlebars ^4.0.5。
编辑 1:
在尝试了一下之后,我可以提供另一个症状:如果 <html> 块之前,SafeString() 调用的结果似乎包含在 <p> 标记中。这并非特定于 doctype 声明,»normal« html 元素似乎也受到了影响。
编辑 2:
现在我已经为safeString() 的功能提炼了 2x2 案例:
a) <html> 块内的 常规 元素(例如 <div>)按预期呈现,没有任何更改。
b) <html> 块之前的 常规 元素可以正常渲染,但放置在 <p> 标记内。
c) <html> 块内的 doctype 元素被呈现为纯文本,如下所示:&lt;!DOCTYPE html&gt;
d) <html> 块之前的 doctype 元素将以相同的方式呈现,但包装在 <p> 元素中。
【问题讨论】:
-
猜猜 SafeString 的用途
-
抱歉,没有看到你的第二条评论!
-
很好地解释这里的问题:handlebars.SafeString 将返回一个字符串,您可以在 html 中安全地使用该字符串,方法是将其威胁为文本而不是 html
-
建议的库看起来很有希望,谢谢!但是,将它集成到我的设置中似乎并非易事。此外,我想了解我的代码有什么问题,因为我已经从文档站点复制/粘贴了它。
标签: javascript html handlebars.js templating metalsmith