【问题标题】:How can I add class_ to preEscapedToHtml in Haskell Blaze or Hamlet?如何在 Haskell Blaze 或 Hamlet 中将 class_ 添加到 preEscapedToHtml?
【发布时间】:2018-01-17 20:06:03
【问题描述】:

如何向preEscapedToHtml 添加一个类?

renderHtml $ preEscapedText "<div>a</div>" ! class_ "c"
"<div>a</div>"

还是到一个由 hamlet 模板生成的 HTML?

然而这是可行的:

renderHtml $ H.div "a" ! class_ "c"
"<div class=\"c\">a</div>"

【问题讨论】:

  • preEscapedText "&lt;div class=\"c\"&gt;a&lt;/div&gt;" 对你不起作用?
  • 没有。它不干。我将不得不使用不同的类来制作重复的功能。例如 userPhotoProfile = preEscapedText "&lt;div class="user-photo-profile"&gt;&lt;img....userPhotoOther = preEscapedText "&lt;div class="user-photo"&gt;&lt;img.... 其中 ... 可以是冗长且重复的内容。
  • 你用的是哪个,preEscapedToHtml 还是 preEscapedText?无论如何,你不能重构你的代码以使用H.div "a" ! class_ "c" 方法吗?这样看起来干净多了。
  • @ricardos 如果你想要 DRY,你可以参数化它:mkDiv c = preEscapedText ("&lt;div class=\"" ++ c ++ "\"&gt;a&lt;/div&gt;")preEscapedText 的重点是你只是给它一些文本,它并不真正知道它里面是否有任何标签或任何东西。所以自然它不能对注入类做任何事情。
  • @FyodorSoikin 不够好,在某些情况下我想添加一个类,也许在其他情况下我需要添加一些“data-*”属性或任何要求。

标签: haskell yesod hamlet


【解决方案1】:

在 Blaze 中,HTML 标记最准确的类型是 TagH.div 是那种类型,不是吗? preEscapedText "&lt;title&gt;Example&lt;/title&gt;&lt;p&gt;HTML document" ! class_ "c" 应该怎么做?属性只能添加到标签,不能添加到 HTML 文档或片段。因此,您应该将标签保留为Tag 类型,直到您添加了所需的所有属性并准备好将多个标签组合到 HTML 片段或文档中。如果您需要跟踪并行生成的多个节点,可以在修改它们时将它们存储在列表、元组或记录中。然后在最后合并成一个HTML

【讨论】:

  • 我认为最好的解决方案是将父级保留在标签中,而将子级保留在 shamlet 或预转义中,例如:linkToHello = a ! href "/hello" $ [shamlet| ...|] 所以,内部部分将用 html 编写,而父级是可编辑。
猜你喜欢
  • 1970-01-01
  • 2014-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多