【问题标题】:How do you turn a kotlinx.html widget into a string?如何将 kotlinx.html 小部件转换为字符串?
【发布时间】:2020-01-01 05:10:38
【问题描述】:

在 kotlinx.html 文档中,它谈到构建“小部件”(其中小部件只是 html dsl 的一部分),如下所示:

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

如果您不想将其包装在正文中,您将如何将其转换为 html?很清楚您将如何将其包裹在其他东西中:

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

得到你

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

但是,什么是直接获取 &lt;div&gt;stuff&lt;/div&gt; 而不将其包装在某些东西中的正确方法?

【问题讨论】:

    标签: kotlinx-html


    【解决方案1】:

    根据(不太容易发现)official documentation

    如果您希望它在根目录上可用(例如: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>"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-22
      相关资源
      最近更新 更多