【发布时间】:2020-01-22 23:08:19
【问题描述】:
我正在尝试在服务器端生成 SVG,并使用 WebSharper 的 RPC 机制将它们传递给客户端。我基于websharper-web 模板,使用dotnet 核心。
为了完整起见,我将模板渲染如下:
// Site.fs
let Draw ctx =
Templating.Main ctx EndPoint.Home "Home" [
h1 [] [text "Say Hi to the server!"]
div [] [client <@ Artery.Main() @>]
]
我已经定义了一个返回我的 SVG 的 RPC 方法:
module Server =
[<Rpc>]
let FetchDrawing () =
let center = {Svg.Point.X=50; Svg.Point.Y=50}
let r = 25
let circle = Svg.Shape.Circle(center=center, radius=r)
async {
return circle |> Svg.render
}
// Returns an SvgElement.circle with cx, cy, and r set
到目前为止这很好,但我一辈子都无法弄清楚如何在客户端中正确加载它。我得到的最接近的是:
[<JavaScript>]
module Artery =
let Main() =
let circle = Server.FetchDrawing()
div [] [
SvgElements.svg [SvgAttributes.height "100"
SvgAttributes.width "100"] [
Doc.Async circle
]
]
这个:
- 类型检查和编译
- 跑步
- 引发运行时 JavaScript 错误
具体来说,我得到了TypeError: x is not a function。 SourceMaps 将错误链接到一个名为Snap.fs 的 WebSharper 库中,它揭示了……相对较少的光。
这是 WebSharper 中的错误吗? 应该这行得通吗?在这样的客户端文档中包含Async<Doc> 的正确方法是什么?如果可能,我宁愿不使用 jQuery——我宁愿返回异步加载到 SVG 中的 JS,而不是让 jQuery 稍后插入——但我对 JQuery 持开放态度如果这是这里的最佳做法,请回答。
【问题讨论】:
标签: f# websharper