Я пытаюсь генерировать SVG на стороне сервера, передавая их клиенту, используя механизм RPC WebSharper.Я основываю это на шаблоне 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() @>]
]
Я определил метод RPC, который возвращает мой SVG:
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
]
]
This:
- Проверка типов и компиляция
- Выполнения
- Выдает ошибки JavaScript во время выполнения
В частности, я получаю TypeError: x is not a function
.SourceMaps связывают ошибку глубоко в библиотеке WebSharper, которая называется Snap.fs
, и которая проливает ... сравнительно мало света.
Это ошибка в WebSharper? Должно ли это работать?Как правильно включить Async<Doc>
в документ на стороне клиента, как это?Если возможно, я бы предпочел бы не использовать jQuery - я бы предпочел вернуть JS, который асинхронно загружается в SVG, а не подключать его позже через jQuery - но я открыт для ответов JQueryесли это лучшая практика здесь.