把手包裹

时间:2016-04-07 11:54:04

标签: javascript html handlebars.js templating metalsmith

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

build.js我有:

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

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

{{doctype}}
<html>
…

结果html以:

开头

<p>&lt;!DOCTYPE html&gt;</p>

- 这显然不是我需要的。

有什么建议吗?

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

编辑1: 稍微尝试一下后,我可以提供另一个症状:SafeString()调用的结果似乎包含在<p>标记中,如果它放在<html>块之前。这不是特定于doctype的声明,“普通的”html元素似乎也会受到影响。

编辑2: 现在我为safeString()

的功能提炼了2x2个案例

a)<div>块内的传统元素(例如<html>)按预期呈现,不做任何更改。

b)<html>块之前的传统元素呈现正常,但放在<p>标记内。

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

d)<html>块之前的 doctype 元素将以相同的方式呈现,但包含在<p>元素中。

1 个答案:

答案 0 :(得分:2)

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