2016-02-06 36 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是指我們剛剛設置的代理郵箱。

這是一個通用的解決方案,可用於任何數量的信號。

相關問題