2017-12-14 20 views
0

私はhttp://elm-lang.org/examples/radio-buttonsのこの例を参照しています。ボタンの状態が管理されているところはどこにも表示されません。私はchecked属性を管理することなくElmのラジオボタンの状態を管理する必要はありますか?

label [] 
    [ input 
     [ type_ "radio" 
     , checked (model.choosenSize == size) 
     , onClick (SetSize size) 
     ] [] 
    , text (sizeToString size) 
    ] 

のような何かをする必要があり、私自身の小さなエルムプロジェクトで

あなたはそれをクリックした後、すべてのラジオボタンがチェックされたままになります。

この例の魔法は何ですか?

+0

あなたは「グループ化された」ラジオのすべての要素を 'name'の属性を追加する場合、Webブラウザは一つだけが選択できるようになります一度に。モデル内の「チェック済み」状態を管理することで、Elmでも同じことができます。しかし、Elmで状態を管理していない場合、Elmは現在アクティブな状態である「読み込み」の方法がありません。 – Sidney

答えて

3

参考にしている例は非常に簡単です。ボタンの状態を明示的に管理するものではありません。代わりに、その状態はブラウザによって管理されます。実際のアプリケーションでは、もちろん明示的に管理する方がよいでしょう。ような何か:

view : Model -> Html Msg 
view model = 
    div [] 
    [ fieldset [] 
     [ radio "Small" (model.fontSize == Small) (SwitchTo Small) 
     , radio "Medium" (model.fontSize == Medium) (SwitchTo Medium) 
     , radio "Large" (model.fontSize == Large) (SwitchTo Large) 
     ] 
    , Markdown.toHtml [ sizeToStyle model.fontSize ] model.content 
    ] 


radio : String -> Bool -> msg -> Html msg 
radio value isChecked msg = 
    label 
    [ style [("padding", "20px")] 
    ] 
    [ input [ type_ "radio", checked isChecked, name "font-size", onClick msg ] [] 
    , text value 
    ] 

(私はradioBool引数を追加しました)

関連する問題