代码之家  ›  专栏  ›  技术社区  ›  James Moore

你怎么变成一个kotlinx.html文件小部件变成一个字符串?

  •  0
  • James Moore  · 技术社区  · 5 年前

    在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> 不把它包起来?

    0 回复  |  直到 5 年前
        1
  •  0
  •   Denys P.    5 年前

    根据(不太容易发现) 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>"
    
    推荐文章