根据子消息划分主更新功能

时间:2017-07-29 09:28:40

标签: architecture message elm reducers

我正在尝试将我的顶级消息与子消息分开,因此我做了:

type GeneratorMsg
    = BoidsGenerated (List Boid)
    | ColoursGenerated (List Color)


type Msg
    = Tick Time
    | UpdateWorld Window.Size
    | GeneratorMsg

但是,在我的主要更新功能中,当我使用 BoidsGenerated 消息时,Elm认为它的类型为 GeneratorMsg ,这是正确的。在同一时间 - 在我看来 - 它的类型为 Msg

有没有办法可以互换地处理 Msg GeneratorMsg ?基本上,我想将更新函数拆分为较小的函数,但我希望与生成的东西有关的所有内容都由1个独立的函数处理。然后该函数将包含 BoidsGenerated ColoursGenerated msgs的情况。 ---谢谢

1 个答案:

答案 0 :(得分:1)

这里有你的名字碰撞。您有一个名为GeneratorMsg的类型以及一个名为GeneratorMsg的不同类型(Msg)的构造函数。

您定义GeneratorMsg的{​​{1}}构造函数的方式,它是无参数的,不包含任何信息的有效负载。您需要定义一个参数来携带Msg值:

GeneratorMsg

然后,您可以在单独的函数中处理更新,但您必须type Msg = Tick Time | UpdateWorld Window.Size | GeneratorMsg GeneratorMsg Cmd.map打包成GeneratorMsg值:

Msg