在kotlinx.html文件文档中,它谈到构建“小部件”(小部件只是html dsl的一部分)如下:
@HtmlTagMarker fun FlowContent.widget(body: FlowContent.() -> Unit) { div { body() } }
createHTML().body { widget { +"stuff" } }
抓住你了
<body> <div>stuff</div> </body>
但是什么才是正确的方法 <div>stuff</div> 不把它包起来?
<div>stuff</div>
根据(不太容易发现) official documentation :
appendHTML().custom { } TagConsumer
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>"