在 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>"