2016-02-06 33 views
5

我想在一个事件中发送两封邮件给不同的地址。我遇到 具体情况是,我有一些弹出式窗口,当用户点击“添加”,我想:使用elm-html可以在一个事件上发送多个消息吗?

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

onClick具有以下类型“Address a - > a - > Attribute”有些似乎没有可能做到这一点。另一方面,在实践中经常会遇到这样的模式(导致多个消息的一个动作)。

现在,我诉诸发送一条消息,通知家长添加项目,然后在隐藏操作更新功能更新弹出父窗口。

addButton = button [onClick context.addTaskAddress model.taskDescription] [text "Add"] 

,然后在父母的组件更新功能

popup = AddTaskPopup.update AddTaskPopup.Hide model.popup 

回答

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是指我们刚刚设置的代理邮箱。

这是一个通用的解决方案,可用于任何数量的信号。

相关问题