0

在 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>不用包裹它呢?

4

1 回答 1

0

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

如果您希望它在根目录上可用(像这样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>"
于 2020-02-09T06:19:41.243 回答