J'utilise le "compose" pattern dans Elm.Modifier le modèle de widget à partir de parent dans Elm
Dans Main.elm
, je me générer une semence initiale de Random
en utilisant ce qui suit:
type alias Model =
{ ...
, seed : Seed
}
initialModel : Model
initialModel =
{ ...
, seed = initialSeed 0
}
init : (Model, Cmd Msg)
init =
(initialModel, generate InitializeSeed (int minInt maxInt))
type Msg
= ...
| InitializeSeed Int
update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
case msg of
...
InitializeSeed value ->
({ model | seed = Random.initialSeed value }, Cmd.none)
qui semble bien fonctionner pour initialiser la graine de générateur de nombres aléatoires à une valeur de départ aléatoire.
J'ai un widget "indépendant" qui est utilisé dans l'application principale. Je voudrais passer la graine à ce widget à la réception du message InitializeSeed
et ensuite récupérer la valeur comme il change dans le widget enfant (en utilisant Random.step
) afin que je puisse ensuite mettre à jour les graines d'autres widgets car ils ont besoin du générateur.
Comment puis-je générer un message pour le widget enfant à partir de la fonction update
dans Main
afin que je puisse transmettre le message à l'enfant? Comment l'enfant peut-il renvoyer la graine mise à jour au parent?
MISE À JOUR:
je me suis dit comment passer la graine vers le widget enfant, bien que je ne suis pas certain que ce soit la meilleure façon.
Le code de l'enfant ressemble à ceci:
type alias Model =
{ ...
, seed : Seed
}
replaceSeed : Model -> Seed -> Model
replaceSeed model seed =
{ model | seed = seed }
et le parent, j'ai modifié la fonction update
comme ceci:
update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
case msg of
...
InitializeSeed value ->
let
seed =
Random.initialSeed value
child_ =
Child.replaceSeed model.child seed
in
({ model
| seed = seed
, child = child_
}
, Cmd.none
)
Je cherche toujours un moyen d'avoir le retour des enfants la graine mise à jour.