如何将 kotlinx.html 小部件转换为字符串?



在 kotlinx.html 文档中,它像这样讨论构建"小部件"(其中小部件只是 html DSL 的一部分(:

@HtmlTagMarker
fun FlowContent.widget(body: FlowContent.() -> Unit) {
div { body() }
}

如果你不想把它包装在一个正文中,你会如何把它变成html? 很明显,您将如何将其包裹在其他东西中:

createHTML().body {
widget { +"stuff" }
}

得到你

<body>
<div>stuff</div>
</body>

但是,在不将其包裹在东西中的情况下获得<div>stuff</div>的正确方法是什么?

根据(不太容易发现的(官方文档:

如果您希望它在根目录上可用(如这样:appendHTML().custom { }(,则必须在TagConsumer上声明它

因此,为了使您的示例正常工作,您需要:

fun <T> TagConsumer<T>.widget(block: FlowContent.() -> Unit): T =
div { block() }

使用它将为您提供预期的结果:

val html = createHTML()
.widget { +"Hello" }
.toString()
assert html == "<div>Hello</div>"

最新更新