2016-02-06 5 views
5

1つのイベントで2つのメッセージを別々のアドレスに送信したいと考えています。私が遭遇した 特定のケースでは、私はいくつかのポップアップを持っていたユーザーがクリックしたときに、私がしたい「追加」ということであった:elm-htmlを使用して1つのイベントで複数のメッセージを送信できますか?

  • 項目があるべき親コンポーネントを通知し
  • (メッセージがポップアップコンポーネントに送る)ポップアップを閉じます追加(メッセージを親コンポーネントに送信)

onClickには、次のタイプの「アドレスa - > a - >属性」があります。一方、実際には、そのようなパターン(複数のメッセージをもたらす1つのアクション)がしばしば出会うと思われる。

今のところ、アイテムを追加したことを親に知らせるメッセージを送信し、更新機能の親が非表示アクションのポップアップを更新しました。

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は設定したプロキシメールボックスを参照します。

これは、任意の数の信号に対して機能する汎用ソリューションです。