2017-03-09 11 views
1

Elm getting started guideは、標準のElm HTMLイベントを使用していないようで、使用方法がわかりません。たとえば、onBlur:今、私はライン3が、2行目でHtml (Msg)にタイプHtml (String -> Msg)を返すいますのでElm - HTMLイベントの使い方は?

view model = 
    div [] 
    [ div [] 
     input [ type_ "text", onInput MsgA ] [] 
    , input [ type_ "text", onBlur MsgB ] [] 
    ] 

これは、コンパイラに失敗します。

なぜこれらの2つのイベントは互換性がありませんか?同時に両方を使用する方法はありますか?さらに、私のような人がonBlurの使い方を理解するのに十分なことはありません。

答えて

3

onBlurは、onInputとは異なるタイプの署名を持っています。あなたがonInputに使用するものは何でもMsg意味

onInput : (String -> msg) -> Attribute msg 

onBlur : msg -> Attribute msg 

は、単一の文字列パラメータを取ることがあります。同様に、onBlurで使用されているMsgはパラメータを取ることができません。次へMsgAMsgBを再定義した場合、それをコンパイルします:

type Msg 
    = MsgA String 
    | MsgB 

を編集

あなたはぼかしハンドラが目標値を受け入れることができるようにしたい場合、あなたはこのように自分自身をロールバックすることができます:

import Html.Events exposing (on, targetValue) 
import Json.Decode as Json 

onBlurWithTargetValue : (String -> msg) -> Attribute msg 
onBlurWithTargetValue tagger = 
    on "blur" (Json.map tagger targetValue) 
+0

おかげ@ChadGilbert。それは少し明確です。私はまだ私がupdate' 'の' MsgB'ブランチにその入力の値を得ることができるようにonBlur'はパラメータを取るために、 '必要があると思っています。 'onInput'の使い方と一緒に' onBlur'の使い方の例を挙げることができますか? – steel

+0

私は「ぼかし」イベントはあなたに現在の値を与えることができます例で私の答えを編集しました。 –

+1

Whoa。エルムは私にそれを全く理解していないことを示し続ける。おかげでトン。 – steel

関連する問題