是否可以使用 elm-html 在一个事件中发送多条消息?
Is it possible to send multiple messages on one event using elm-html?
我想在一次活动中向不同的地址发送两条消息。
我遇到的特殊情况是我有一个弹出窗口,当用户点击 "Add" 我想:
- 关闭弹窗(消息发送到弹窗组件)
- 通知父组件应该添加项目(消息发送到父组件)
onClick 具有以下类型 "Address a -> a -> Attribute" 有些似乎无法做到这一点。另一方面,这种模式(一个动作导致多个消息)似乎在实践中经常遇到。
现在我采取了发送一条消息来通知家长有关添加的项目,然后在更新功能中使用隐藏操作更新弹出窗口。
addButton = button [onClick context.addTaskAddress model.taskDescription] [text "Add"]
然后在父组件更新函数中
popup = AddTaskPopup.update AddTaskPopup.Hide model.popup
您可以设置一个中间代理邮箱,获取地址和消息对列表,然后通过单击按钮调用它。
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
指的是我们刚刚设置的代理邮箱
这是适用于任意数量信号的通用解决方案。
我想在一次活动中向不同的地址发送两条消息。 我遇到的特殊情况是我有一个弹出窗口,当用户点击 "Add" 我想:
- 关闭弹窗(消息发送到弹窗组件)
- 通知父组件应该添加项目(消息发送到父组件)
onClick 具有以下类型 "Address a -> a -> Attribute" 有些似乎无法做到这一点。另一方面,这种模式(一个动作导致多个消息)似乎在实践中经常遇到。
现在我采取了发送一条消息来通知家长有关添加的项目,然后在更新功能中使用隐藏操作更新弹出窗口。
addButton = button [onClick context.addTaskAddress model.taskDescription] [text "Add"]
然后在父组件更新函数中
popup = AddTaskPopup.update AddTaskPopup.Hide model.popup
您可以设置一个中间代理邮箱,获取地址和消息对列表,然后通过单击按钮调用它。
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
指的是我们刚刚设置的代理邮箱
这是适用于任意数量信号的通用解决方案。