是否可以使用elm-html在一个事件上发送多条消息?

Art*_*ski 5 elm

我想在一个事件上向不同的地址发送两条消息.我遇到的特殊情况是我有一些弹出窗口,当用户点击"添加"时我想:

  • 关闭弹出窗口(消息发送到弹出窗口组件)
  • 通知父组件应该添加项目(消息发送到父组件)

onClick有以下类型"地址a - > a - >属性",似乎没有可能做到这一点.另一方面,似乎在实践中经常遇到这样的模式(导致多个消息的一个动作).

现在,我使用一条消息通知父母有关添加的项目,然后在更新功能更新弹出窗口中显示隐藏操作.

addButton = button [onClick context.addTaskAddress model.taskDescription] [text "Add"]
Run Code Online (Sandbox Code Playgroud)

然后在父级的组件更新功能中

popup = AddTaskPopup.update AddTaskPopup.Hide model.popup
Run Code Online (Sandbox Code Playgroud)

Cha*_*ert 4

您可以设置一个中间代理邮箱,该邮箱获取地址和消息对的列表,然后通过单击按钮调用该邮箱。

proxy : Mailbox (List (Address a, a))
proxy =
  mailbox []
Run Code Online (Sandbox Code Playgroud)

然后你可以有一个广播信号来监听代理邮箱并创建一堆Signal.send任务来通知其他地址。

port broadcast : Signal (Task x (List ()))
port broadcast =
  let
    tasks = List.map (uncurry Signal.send)
  in
    Signal.map (Task.sequence << tasks) proxy.signal
Run Code Online (Sandbox Code Playgroud)

然后,您的onClick代码将如下所示,您在其中传递地址和操作对的列表:

onClick proxy.address [(address, Action1), (address, Action2)]
Run Code Online (Sandbox Code Playgroud)

注意,上面代码中,address指的是进入视图函数的地址,而proxy.address指的是我们刚刚设置的代理邮箱。

这是一种通用解决方案,适用于任意数量的信号。