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


person Ivaylo Slavov    schedule 25.10.2018    source источник


Ответы (1)


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

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

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

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

Это может быть приятным и полезным дополнением; вы должны опубликовать предложение на github.

person Tarmil    schedule 25.10.2018
comment
Спасибо за участие. Я создал предложение для этого, как вы предложили. Однако одно замечание: для конструктора вы передаете содержимое разметки шаблона, тогда как я бы предпочел передать имя шаблона для его динамической загрузки. Тем не менее, меня больше беспокоит заполнение дыр, так как у меня есть некоторые идеи по работе с созданием экземпляра шаблона по имени. - person Ivaylo Slavov; 25.10.2018
comment
Спасибо за усилия! С нетерпением ждем официального появления этой функции в WebSharper. - person Ivaylo Slavov; 30.10.2018