0

我有带有 html 标记的字符串,我想从中创建 Doc elment,如下所示:

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]

但它太难了,不可靠,而且没有真正起作用。如果可能的话,请给我一个想法如何解决这个问题。提前致谢!

4

2 回答 2

2

以防万一有人需要在服务器上的 WebSharper 中使用静态 HTML (我需要向WebSharper 生成的 HTML 页面添加一些 javascript),有相当新的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 ]
        )
    )
于 2015-11-01T17:09:56.607 回答
1

已经在https://github.com/intellifactory/websharper.ui.next/issues/22上回答了这个问题,但在这里复制我的答案:

如果您只想从静态 html 创建 UI.Next Doc,您可以执行以下操作:

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

这不是很好,但应该可以工作,我认为目前没有更好的方法。或者,也许您可​​以使用模板,但尚未记录在案,我不确定它是否适合您的用例。

显然,如果您想动态更改呈现的元素,您可以将其设为 aVarDoc.EmbedViewDoc.Static.

于 2015-06-29T12:41:13.790 回答