【发布时间】:2017-05-11 10:13:07
【问题描述】:
从这三个声明开始:
type SharedMsg
= SharedAction
type Page1Msg
= Page1Action
type Page2Msg
= Page2Action
我有办法获得以下等效项吗?喜欢“合并”联合类型的方法吗?
type Msg
= SharedAction
| Page1Action
| Page2Action
==============================
上下文:我将 Elm 应用程序拆分为每页一个模块,每个模块都有自己的文件夹。
有些动作是共享的,有些动作是特定于页面的。
如果我要使用Html.map 方法,我觉得我必须重写页面在其自己的PageMsg 消息类型中使用的每个共享操作:
type Page1Msg
= Page1Action
| SharedAction
type Msg
= Page1Msg Page1Msg
| Page2Msg Page2Msg
view : Model -> Html Msg
view =
Html.map Page1Msg (Page1View.view model)
因此我想为所有页面使用唯一的 Msg 类型,但通过在它们自己的文件夹中写入特定于页面的消息来保持模块化,然后通过合并它们以某种方式定义唯一的 Msg 类型。
【问题讨论】:
-
这些页面是否在单页应用程序中?你有什么样的共享信息,它们是从哪里出现的?当 Elm 社区第一次尝试解决这些问题时,我在 Medium (medium.com/@alex.lew/…) 上写了一篇关于我对 Page1 和 Page2 都能够在“父”更新功能中触发一些共享消息的问题的解决方案.但从那时起,社区的思想发生了变化,了解您的案例的具体情况可能会激发出更好的解决方案!
-
(我应该提一下,如果不创建新的标签/构造函数,就无法像您尝试的那样合并联合类型。)
-
1.感谢您关于合并类型和 2 的回答。哇超级智能翻译模式,我将朝那个方向挖掘!我想到的共享消息与您提到的那些具有相同的性质:显示全局应用加载微调器,加载跨页面共享数据...
标签: elm modularity union-types