Использование типа с хоста 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#.

Надеюсь, это поможет!

Другие вопросы по тегам