0
我在Elm中使用的是"compose" pattern。从Elm的父项更改构件模型
在Main.elm
,我使用下面产生初始种子Random
:
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)
这似乎很好用于初始化随机数发生器种子的随机开始值工作。
我有一个“独立的”小部件,在主应用程序中使用。我希望在接收到InitializeSeed
消息时将种子传递给该小部件,然后在子部件更改(使用Random.step
)时检索该值,以便随后可以根据需要更新其他小部件的种子。
我该如何从update
函数Main
中为子控件生成消息,以便我可以将种子传给孩子?孩子如何将更新的种子返回给父母?
UPDATE:
我想通了如何通过种子下到子部件,虽然我不能肯定,这是最好的办法。
孩子的代码如下所示:
type alias Model =
{ ...
, seed : Seed
}
replaceSeed : Model -> Seed -> Model
replaceSeed model seed =
{ model | seed = seed }
,并在父,我修改了update
功能是这样的:
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
)
我仍然在寻找一种方式来将孩子归还更新的种子。