从 Elm 中的父级更改小部件模型

拉尔夫

在 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以便我可以将种子传递给孩子?孩子如何将更新后的种子返回给父母?

更新:

我想出了如何将种子传递给子小部件的方法,尽管我不确定这是最好的方法。

子代码如下所示:

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
                )

我仍在寻找一种方法让孩子返回更新后的种子。

西蒙

而任何 Elm 程序中的顶级更新函数都必须

update : Msg -> Model -> (Model, Cmd Msg)

它的任何后代的形状都没有限制。所以没有什么能阻止你为你的孩子定义

update : Seed -> Msg -> Model -> (Model, Cmd Msg, Seed)

或者,如果孩子从不返回任何命令

update : Seed -> Msg -> Model -> (Model, Seed)

也许您有几件事情要传递,例如包括父信息。然后你可以走得更远

type alias Config msg = 
    { seed : Seed 
    , someParentMessage : String -> msg 
    }

update : Config msg -> Msg -> Model -> (Model, Maybe (Cmd msg), Seed)

当然,您需要在 Main 中适当地连接所有这些,但编译器会对此提供帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Elm中的Elm编译器?

来自分类Dev

Elm中的类型约束

来自分类Dev

Elm 0.17中的图片

来自分类Dev

Elm中的值类型

来自分类Dev

Elm中的输入错误

来自分类Dev

取消Elm中的订阅

来自分类Dev

Elm 使用 http 更新模型

来自分类Dev

如何从Elm中的组件调用父味精?

来自分类Dev

更改小部件的样式

来自分类Dev

模型中可配置的输入(Elm 0.13)

来自分类Dev

如何使用elm-ui在elm中显示圆形图像?

来自分类Dev

Elm REPL中的类型注释

来自分类Dev

在Elm中解析嵌套的JSON

来自分类Dev

在elm中设置页面标题?

来自分类Dev

限制Elm中的type值

来自分类Dev

如何更改Elm中链接的颜色?

来自分类Dev

如何在KivyMD中更改小部件参数的值

来自分类Dev

在gWidgetsRGtk2中更改小部件的鼠标光标

来自分类Dev

更改小部件中按钮的背景:Android

来自分类Dev

在 PyQt5 中更改小部件的高亮颜色

来自分类Dev

有没有办法阻止 gulp-elm 中的 elm.init() 将 elm-stuff 和 elm-package.json 移动到父目录中?

来自分类Dev

elm-联合类型和模型

来自分类Dev

Elm Html 和视图:模型 -> Html Msg

来自分类Dev

在Elm中选择更改记录值

来自分类Dev

Qt,更改小部件覆盖图?

来自分类Dev

Django Admin更改小部件类型

来自分类Dev

更改小部件的颜色。Appcompat 21

来自分类Dev

更改小部件activedisplaymode iOS

来自分类Dev

Django Forms - 更改小部件属性