我想在一个事件上向不同的地址发送两条消息。 我遇到的特殊情况是我有一些弹出窗口,当用户点击“添加”时,我想:
onClick有以下类型“地址a - > a - >属性”,似乎没有可能做到这一点。另一方面,似乎在实践中经常会遇到这样的模式(一个导致多个消息的动作)。
现在,我尝试发送一条消息,通知父母有关添加的项目,然后在更新功能更新弹出窗口中显示隐藏操作。
addButton = button [onClick context.addTaskAddress model.taskDescription] [text "Add"]
然后在父级的组件更新功能
中popup = AddTaskPopup.update AddTaskPopup.Hide model.popup
答案 0 :(得分:3)
您可以设置一个中间代理邮箱,其中包含地址和邮件对的列表,然后通过单击按钮调用该邮箱。
proxy : Mailbox (List (Address a, a))
proxy =
mailbox []
然后你可以有一个广播信号,它监听代理邮箱并创建一堆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
您的onClick
代码看起来像这样,您可以在其中传递地址和操作对列表:
onClick proxy.address [(address, Action1), (address, Action2)]
请注意,在上面的代码中,address
表示进入视图功能的地址,而proxy.address
表示我们刚设置的代理邮箱。
这是一个适用于任意数量信号的通用解决方案。