不能使用提供的参数调用 HTML DSL 占位符插入

HTML DSL placeholder insert cannot be called with argument supplied

提问人:FailedUnitTest 提问时间:10/12/2023 更新时间:10/12/2023 访问量:19

问:

我正在使用 Kotlin DSL 模板构建一些 Html 模板:https://ktor.io/docs/html-dsl.html#templates

但是,在我的方法中有些东西没有意义:

class LayoutTemplate() : Template<HTML> {
    val titleText = Placeholder<FlowContent>()
    val header = TemplatePlaceholder<FlowContent>()
    val footer = TemplatePlaceholder<FlowContent>()

    override fun HTML.apply() {
        head {
            title {
                insert(titleText)
            }
        }

        body {
            insert(HeaderTemplate(), header)
            h1 {
                insert(titleText)
            }
            div {
                id = "content"
                insert(content)
            }
            insert(FooterTemplate(), footer)
        }
    }
}

class HeaderTemplate : Template<BODY> {
    override fun BODY.apply() {
        div {
            id = "header"
            h1 { +"Header" }
        }
    }
}

class FooterTemplate : Template<BODY> {
    override fun BODY.apply() {
        div {
            id = "footer"
            h1 { +"Footer" }
        }
    }
}

但是,我收到一个错误:以下函数都不能使用提供的参数调用。insert(HeaderTemplate(), header)

类似显示:insert(titleText)

类型不匹配。必需:流找到的内容:标题

有人可以帮助我不明白的事情吗?

kotlin kotlin-dsl kotlin-html-builder

评论

1赞 samabcde 10/12/2023
检查 Template.kt 中插入的签名。如下所示的更新将解决您的一些错误: val titleText = Placeholder<TITLE>() val header = TemplatePlaceholder<HeaderTemplate>() val footer = TemplatePlaceholder<FooterTemplate>()
0赞 FailedUnitTest 10/13/2023
谢谢你的帮助。一些关于小细节的文档对这个 DSL 库真的很有帮助

答: 暂无答案