加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 资源网站 > 资源 > 正文

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

发布时间:2020-12-14 23:28:05 所属栏目:资源 来源:网络整理
导读:我想在一个事件上向不同的地址发送两条消息. 我遇到的特殊情况是我有一些弹出窗口,当用户点击“添加”时我想: 关闭弹出窗口(消息发送到弹出窗口组件) 通知父组件应该添加项目(消息发送到父组件) onClick有以下类型“地址a – a – 属性”,似乎没有可能这样
我想在一个事件上向不同的地址发送两条消息.
我遇到的特殊情况是我有一些弹出窗口,当用户点击“添加”时我想:

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

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

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

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是指进入view函数的地址,而proxy.address是指我们刚设置的代理邮箱.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读