是否可以使用 Hamlet 模板库但仍要编写结束标签?由于我在编写 Ruby 时不使用 Haml 的所有相同原因,我对模板中显着空白的想法感到不舒服。
This answer on another question似乎表明您可以根据需要使用结束标签,但是在我在 FP Haskell Center 上设置的基本入门项目中,如果我向任何内容添加结束标签,我将无法编译代码除了在同一行打开的标签。
是否可以使用 Hamlet 模板库但仍要编写结束标签?由于我在编写 Ruby 时不使用 Haml 的所有相同原因,我对模板中显着空白的想法感到不舒服。
This answer on another question似乎表明您可以根据需要使用结束标签,但是在我在 FP Haskell Center 上设置的基本入门项目中,如果我向任何内容添加结束标签,我将无法编译代码除了在同一行打开的标签。
那么文档似乎很清楚:
...您在 Hamlet 中使用结束标签的唯一时间是内联标签;普通标签没有关闭。
http://www.yesodweb.com/book/shakespearean-templates(“标签”部分结束)
相关源码:https ://github.com/yesodweb/shakespeare/blob/master/hamlet/Text/Hamlet/Parse.hs#L558函数parseDoc
等parseLines
。
以下显示每行中的第一项(标签)被特殊处理,而其他只是ContentRaw
ghci Text/Hamlet/Parse.hs
fmap (\(x,y,z)->z) $ parseLines defaultHamletSettings "<foo> <bar> @{oof} </rab>"
==> Ok [(0,LineTag {_lineTagName = "foo", _lineAttr = [],
_lineContent = [ContentRaw " <bar> ",
ContentUrl False (DerefIdent (Ident "oof")),ContentRaw " </rab>"],
_lineClasses = [], _lineAttrs = [], _lineNoNewline = False})]
因此,hamlet 永远不会真正注意到(内联)标签是否关闭。
仍然有机会切换到“从不自动关闭”模式,closeStyle
看起来nestToDoc
很有希望,但对于非空内容,我们总是得到CloseSeparate
,这意味着将插入结束标签。