我可以在编译时不知道其名称的情况下填充 websharper 模板的漏洞吗

Can I fill a websharper template's hole without knowing its name at compile time

我是 WebSharper 的新手,但在使用 WebSharper 4 时遇到了问题:

我有以下 html 模板 (some-template.html) :

<div class="container">
    <div ws-replace="Content">
    </div>
</div>

它定义了一个名为 Content 的内容空洞。通常,可以使用以下代码 (F#) 来填充它:

type SomeTemplate = WebSharper.UI.Templating.Template<"some-template.html">
let doc = SomeTemplate().Content(someElements)

在我的场景中,我不知道模板名称和编译时的漏洞。假设我有一个函数:

let buildDom(tempalte : string, holeName : string, content : Doc list) : Doc =
    let template = WebSharper.UI.Template<tempalte> // (1)
    // template.FillHole(holeName, content) (2)

我不知道如何最好地处理 (1) -- 创建模板,以及 (2) - 定位和填充孔。想到反射,但我想知道是否有更优雅、更高效的方法。

一个更普遍的问题——是否有动态组合 html 模板化 sitelet 的好方法?这就是我想要实现的目标,但如果它已经完成,就没有必要重新发明轮子了。如果您也可以向我指出此类资源,我将不胜感激。

您可以通过将字符串传递给构造函数来传递动态模板:

type SomeTemplate = WebSharper.UI.Templating.Template<"some-template.html">

let doc = SomeTemplate("<div>...</div>").SomeHole("some content").Doc()

但是这些漏洞仍然是基于类型提供者的静态类型。目前没有API实现动态孔

不过,这可能是一个不错且有用的补充;你应该 post 一个建议 on github.