【问题标题】:Handlebars wraps <!DOCTYPE html>Handlebars 包裹 <!DOCTYPE html>
【发布时间】:2016-07-28 06:57:15
【问题描述】:

我正在尝试让我的 metalsmith 设置正常工作,没什么特别的。

在我的build.js 我有:

…
handlebars.registerHelper('doctype', function() {
  return new handlebars.SafeString('<!DOCTYPE html>');
});
…

在我的部分模板header.hbt 我有:

{{doctype}}
<html>
…

结果 html 以:

&lt;p&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/p&gt;

——这显然不是我需要的。

有什么建议吗?

附言。在我的布局文件中使用普通的 doctype 定义具有相同的效果。使用handlebars ^4.0.5

编辑 1: 在尝试了一下之后,我可以提供另一个症状:如果 &lt;html&gt; 块之前,SafeString() 调用的结果似乎包含在 &lt;p&gt; 标记中。这并非特定于 doctype 声明,»normal« html 元素似乎也受到了影响。

编辑 2: 现在我已经为safeString() 的功能提炼了 2x2 案例:

a) &lt;html&gt; 块内的 常规 元素(例如 &lt;div&gt;)按预期呈现,没有任何更改。

b) &lt;html&gt; 块之前的 常规 元素可以正常渲染,但放置在 &lt;p&gt; 标记内。

c) &lt;html&gt; 块内的 doctype 元素被呈现为纯文本,如下所示:&amp;lt;!DOCTYPE html&amp;gt;

d) &lt;html&gt; 块之前的 doctype 元素将以相同的方式呈现,但包装在 &lt;p&gt; 元素中。

【问题讨论】:

  • 猜猜 SafeString 的用途
  • 抱歉,没有看到你的第二条评论!
  • 很好地解释这里的问题:handlebars.SafeString 将返回一个字符串,您可以在 html 中安全地使用该字符串,方法是将其威胁为文本而不是 html
  • 建议的库看起来很有希望,谢谢!但是,将它集成到我的设置中似乎并非易事。此外,我想了解我的代码有什么问题,因为我已经从文档站点复制/粘贴了它。

标签: javascript html handlebars.js templating metalsmith


【解决方案1】:

似乎是与metalsmith 相关的问题,而不是handlebars 所固有的。给定的(错误!) 插件调用顺序会导致问题:在调用use(markdown(…)) 之前调用use(layouts(…)) 是原因。 (所以markdown 插件可能会进行包装。)抱歉给您带来麻烦。

【讨论】:

  • 是哪个插件造成的?很高兴知道其他有问题的人。
  • @ismay:抱歉耽搁了,刚刚编辑了答案。
猜你喜欢
  • 2014-05-03
  • 1970-01-01
  • 1970-01-01
  • 2014-07-30
  • 1970-01-01
  • 2011-12-11
  • 1970-01-01
  • 1970-01-01
  • 2014-02-12
相关资源
最近更新 更多