【问题标题】:Compose HTML with kotlinx.html使用 kotlinx.html 编写 HTML
【发布时间】:2020-10-10 14:42:56
【问题描述】:

我正在尝试使用 kotlinx.html 构建 html 布局页面。我可以创建主页,但在将其分解为由单独功能生成的部分时遇到问题。我不知道如何将在单独函数中创建的 html 包含到主文档中。

我在使用 unsafe 方面取得了成功,但我认为应该有更好的方法

我的单元测试如下:

import kotlinx.html.*
import kotlinx.html.stream.appendHTML
import kotlinx.html.stream.createHTML
import org.junit.jupiter.api.Test

class TestHtmlDsl {

    fun html(): String {
        val stringBuffer = StringBuffer()
        stringBuffer.appendHTML().html {
            head {
            }
            body {
                h1 { +"Head lines" }
                div {
                    id = "main div"
                    div {
                       strong {+"sub div"}
                    }
                    getDiv1()
                    getDiv2()
                }
            }
        }
        return stringBuffer.toString()
    }

    fun getDiv1(): DIV.() -> Unit {
        return {
            p { +"first try" }
        }
    }

    fun getDiv2(): String {
        return createHTML().div {
            p { +"second try" }
        }
    }

    @Test
    fun testHtml() {
        println(html())
    }
}

它产生输出:

<html>
  <head></head>
  <body>
    <h1>Head lines</h1>
    <div id="main div">
      <div><strong>sub div</strong></div>
    </div>
  </body>
</html>

两个带有段落的 div 都丢失了

我正在运行这个服务器端 (jvm)。我在js中找到了一些例子,但没有运气

我很想在某个地方为 kotlinx 找到更好的文档

【问题讨论】:

    标签: html kotlin jvm kotlinx-html


    【解决方案1】:

    getDiv1()返回函数,所以你需要调用它:getDiv1()()

    getDiv2()返回String,所以你需要附加它:+getDiv2()(注意HTML中的所有保留字符(如&amp;lt;&amp;gt;)将被替换为字符实体(&amp;lt;&amp;gt;),所以无论如何这不太可能是你的选择)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-11
      • 2011-08-21
      • 1970-01-01
      • 2012-05-31
      • 1970-01-01
      • 2019-02-04
      相关资源
      最近更新 更多