如何从导入模块的消息中提取信息?

时间:2017-05-05 14:53:42

标签: functional-programming elm

我正在尝试使用"按钮"示例(http://elm-lang.org/examples/buttons)并从另一个模块中导入它,该模块将在同一页面上显示多个模块。

我担心我仍在考虑组件,但我还是想分享它。

我创建了Main.elm,它加载了一个稍微修改过的按钮示例版本(Buttons.elm)。

在Main.elm中,我有一个Buttons.Model列表,用于生成按钮列表。

我现在被困了,因为我不知道如何从Main.elm中的Buttons.Msg获取必要的信息

要查看代码:

$ git clone https://github.com/lucamug/elm-multiple-buttons.git
$ cd elm-multiple-buttons/
$ elm-package install
$ elm-reactor

然后打开

- 解决方案

正如Chad Gilber在接受的答案中指出的那样,这个问题就在这一行:

(List.indexedMap (\position buttons -> Html.map Tag (Buttons.view position buttons)) model.buttonsList)

这是正确的版本

(List.indexedMap (\position buttons -> Html.map (Tag position) (Buttons.view buttons)) model.buttonsList)

如果您对此实施感兴趣,可以在此帖 https://medium.com/@l.mugnaini/recycling-elm-code-transforming-it-in-a-module-4946d5ccd3cd

中找到更多详细信息。

1 个答案:

答案 0 :(得分:2)

您需要更新Tag构造函数以包含数组索引。

代码的相关更改是:

view model =
    div []
        (List.indexedMap (\position buttons -> Html.map (Tag position) (Buttons.view position buttons)) model.buttonsList)

type Msg
    = Tag Int Buttons.Msg

update msg model =
    case msg of
        Tag position button_Msg ->

并且您要删除position = 1功能中的硬编码update

This Pull Request概述了必要的更改。