在select元素中,如何从Elm中的模型中指定最初选择的选项?

Gab*_*abe 1 elm

假设我有一个选择元素来选择一个人,我希望最初选择某个人,比如id = 3.如何将此id传递给我的选项,然后在该选项中将selected属性设置为True?

一些示例代码:

personSelect : List Person -> String -> Html Msg
personSelect : personList selectedId =
    div []
        [ select [] (List.map personOption personList) ]


personOption : Person -> Html Msg
personOption : person = 
    option [ value (toString person.id) ] [ text person.name ]
Run Code Online (Sandbox Code Playgroud)

具体来说,如何将"selectedId"传递给"personOption"?我甚至可以使用List.map来做到这一点吗?

非常感谢!

Sør*_*ois 7

提供selectedId作为参数personOption并利用您可以在Elm中部分应用函数.也就是说,当你给一个函数一些但不是所有它需要的参数时,你会得到一个函数,等待剩下的参数.

首先,添加selectedIdpersonOptions和选择是否匹配呈现的选项.

personOption : String -> Person -> Html Msg
personOption selectedId person = 
  option 
    [ selected (selectedId == person.id)
    , value (toString person.id)
    ]
    [ text person.name ]
Run Code Online (Sandbox Code Playgroud)

然后personOption通过给它第一个参数进行部分应用,然后再将其传递给map:

personSelect : List Person -> String -> Html Msg
personSelect personList selectedId =
  div []
    [ select [] 
        (List.map (personOption selectedId) personList) 
        -- personOption selectedId : String -> Html Msg
     ]
Run Code Online (Sandbox Code Playgroud)