при создании вашего Elmish Program
вы можете использовать |> Program.runWith
, чтобы передать ему начальный аргумент.
type Model =
{ Value : string }
let init (initial : string) = { Value = initial }, Cmd.none
Program.mkProgram init update view
|> Program.withReact "elmish-app"
|> Program.runWith "My initial value"
Обратите внимание, что initial
в init
является строкой, поскольку она получает аргумент Program.runWith
.
Чтобы представить API, в вашем браузере способ hacky
заключается в следующем:
open Fable.Core.JsInterop
let private startApplication arg =
Program.mkProgram init update view
|> Program.withReact "elmish-app"
|> Program.runWith arg
Fable.Import.Browser.window?startApplication <- startApplication
Итак, вы настраиваете регистрацию функции startApplication
в глобальной области видимости window
.
Более чистое решение - использовать configure webpack
, чтобы он сгенерировал библиотеку и зарегистрировал ее для вас в области действия window
.
В вашем webpack.config.js ваш выходной узел должен выглядеть так:
output: {
path: resolve('./output'),
filename: '[name].js',
libraryTarget: 'var',
library: 'Program'
},
Затем в вашем коде используйте интерфейс для предоставления JavaScript-дружественного API:
type MyApp =
abstract Run : string -> unit
let api =
{ new MyApp with
member __.Run arg = startApplication arg
}
И теперь вы можете вызывать его из JavaScript, используя Program.api.Run("initial value")