Sie müssen programWithFlags
verwenden, um Initialwerte von Javascript zu übergeben. Die "Flags", die Sie von javascript übergeben, sollten den gleichen Datensatztyp haben, wenn Sie die automatische Typumwandlung von Elm verwenden möchten:
Nehmen wir an, Ihre me
ist nur eine Zeichenfolge, aber Ihre todos
ist eine Liste der booleschen Flags und einer Bezeichnung. Ihre Flags
Art könnte wie folgt aussehen:
type alias Todo =
{ done : Bool, label : String }
type alias Flags =
{ me : String, todos : List Todo }
Ihre init
Funktion müßte die Fahnen Wert in geeigneter Weise zu handhaben. Hier ist ein Beispiel für nur die Felder Zuordnung Felder mit dem gleichen Namen Modell:
type alias Model =
{ me : String, todos : List Todo }
main : Program Flags Model Msg
main =
Html.programWithFlags
{ init = init
, view = view
, update = update
, subscriptions = \_ -> Sub.none
}
init : Flags -> (Model, Cmd Msg)
init flags =
{ me = flags.me, todos = flags.todos } ! []
Ihr Javascript benötigt aktualisiert wird in den Flaggen zu übergeben. Sie tun das, ein JSON-Objekt als ersten Parameter, indem auf Vollbild oder einbetten:
var app = Elm.Main.fullscreen({
"me": "John Doe",
"todos": [
{ done: true, label: "Do this thing" },
{ done: false, label: "And this thing" }
]
});
hier ein working example on ellie-app.com
Wenn Elm ist die automatische json-to-Mapping Umwandlung ist nicht stark genug für Ihre Dekodierung, Sie können stattdessen den Typ Json.Decode.Value
als Ihr Flag verwenden, dann Json.Decode.decodeValue
mit Ihrem Kunden-Decoder. Here is an example on ellie-app.com of using a custom decoder.
Das ist brilliant. Ich danke dir sehr. –