繁体   English   中英

我可以在编译时不知道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。

不过,这可能是一个很好的有用的补充。 您应该在github上发布建议。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM