Использование типа с хоста F# через Ajax в коде JS FunScript
Как использовать типы, объявленные в моем хост-проекте и переданные через Ajax в сгенерированном коде FunScript?
Например, я скажу, что я объявляю тип T, а затем создаю конечную точку REST, обслуживающую данные в этом формате. Теперь, если я хочу загрузить данные и использовать их из FunScript, их больше не будет типа T.
Отредактировано с решением, основанным на ответе Альфансо:
Предполагая, что тип "MyType" определен в базовом проекте F#, и данные, соответствующие этому типу, передаются на локальный хост:6543/myData
let start () =
async{
let url = "http://localhost:6543/myData"
let req = System.Net.WebRequest.Create(url)
let! data = req.AsyncGetJSON<MyType list>()
Globals.window.alert( (sprintf "%A" data) )
}
|> Async.StartImmediate
То, что мне не хватало, было
- req.AsyncGetJSON
- Использовать Async.StartImmediate
1 ответ
Не могли бы вы опубликовать код, чтобы лучше понять, что именно вы пытаетесь сделать? Для справки вы можете увидеть пример того, как обмениваться безопасными типами значениями JSON с помощью расширений FunScript.HTML в этом небольшом проекте. В этом случае:
- Типы распределяются между сервером, клиентом и базой данных с использованием записей F# с
CLIMutable
а такжеSystem.Data.Linq.Mapping.Table
атрибуты: источник - Для сервера я использую ASP.NET Web API, который прозрачно отправляет типы как JSON: Source
- В клиенте я использую
WebRequest.AsyncGetJSON<'T>
расширение из FunScript.HTML, которое в фоновом режиме просто выдаетXMLHttpRequest
, анализирует результат с помощью браузераJSON.parse
метод и использованиеunbox<'T>
"привести" объект к нужному типу: здесь, здесь и здесь.
unbox<'T>
это маленькая хитрость, которую вам часто приходится использовать, если вы хотите использовать динамические типы статически типизированным способом в F#.
Надеюсь, это поможет!