Возможность создания Doc элемента гипертекста в Websharper.UI.Следующая

У меня есть строка с html-разметкой, и я хочу создать из нее элемент Doc следующим образом:

Doc.FromHtm "<div><p>.....</p>.....</div>"

Как я понимаю, сейчас это невозможно. Ок, что не получается аккуратно зашить, попробовал грубо прибить с помощью jquery:

JQuery.JQuery.Of( "." + class'name ).First().Html(html'content)

Но чтобы вызвать этот код, мне нужно указать обработчик событий для элемента Doc. Но это не реализовано в UI.Next. Я пытался отслеживать изменения модели с заданным классом CSS асинхронно:

let inbox'post'after'render = MailboxProcessor.Start(fun agent -> 
        let rec loop (ids'contents : Map<int,string>) : Async<unit> = async {
            // try to recive event with new portion of data
            let! new'ids'contents = agent.TryReceive 100
            // calculate the state of the agent
            let ids'contents = 
                // merge Map's
                (   match new'ids'contents with
                    | None -> ids'contents
                    | Some (new'ids'contents) -> 
                        new'ids'contents @ (Map.toList ids'contents)
                        |> Map.ofList )                    
                |> Map.filter( fun id content ->
                    // calculate CSS class name
                    let class'name = post'text'view'class'name id
                    // change it's contents of html
                    JQuery.JQuery.Of( "." + class'name ).First().Html(content).Size() = 0)
            // accept the state of the agent
            return! loop ids'contents }
        loop Map.empty )         

а затем, например, для одного элемента:

inbox'post'after'render.Post [id, content]

Но это слишком сложно, ненадежно и не очень работает. Подскажите, пожалуйста, как решить проблему, если это возможно. Заранее спасибо!


person fpawel    schedule 25.06.2015    source источник


Ответы (2)


На всякий случай кому-то нужно использовать статический HTML в WebSharper на сервере (мне нужно было добавьте javascript на HTML-страницу, сгенерированную WebSharper), есть довольно новый Doc.Verbatim полезный пример. нравится

let Main ctx action title body =
    Content.Page(
        MainTemplate.Doc(
            title = title,
            menubar = MenuBar ctx action,
            body = body,
            my_scripts = [ Doc.Verbatim JavaScript.Content ]
        )
    )
person davidpodhola    schedule 01.11.2015

Уже ответили на этот вопрос на https://github.com/intellifactory/websharper.ui.next/issues/22, но копирую свой ответ сюда:

Если все, что вам нужно, это создать UI.Next Doc из статического html, вы можете сделать следующее:

let htmlElem = JQuery.JQuery.Of("<div>hello</div>").Get(0)
let doc = Doc.Static (htmlElem :?> _)

Это не очень хорошо, но должно работать, и я не думаю, что на данный момент есть лучший способ сделать это. Или, может быть, вы могли бы использовать шаблоны, но это еще не задокументировано, и я не уверен, что это подойдет для вашего варианта использования.

Очевидно, что если вы хотите динамически изменять отображаемый элемент, вы можете сделать его Var и использовать Doc.EmbedView вместе с Doc.Static.

person qwe2    schedule 29.06.2015