Могу ли я заполнить отверстие шаблона websharper, не зная его имени во время компиляции

Я новичок в использовании 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-шаблонных сайтов? Это то, чего я пытаюсь достичь, но если это уже сделано, нет необходимости изобретать велосипед. Буду признателен, если вы укажете мне на такие ресурсы, если таковые имеются.

1 ответ

Решение

Вы можете передать динамический шаблон, передав строку в конструктор:

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

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

но дыры все еще набираются статически в зависимости от типа провайдера. В настоящее время нет API для реализации динамических дыр.

Это может быть хорошим и полезным дополнением; Вы должны опубликовать предложение на GitHub.

Другие вопросы по тегам