假设我有一个选择元素来选择一个人,我希望最初选择某个人,比如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 ]
具体来说,如何将“selectedId”传递给“personOption”?我甚至可以使用List.map吗?
非常感谢!
答案 0 :(得分:7)
提供selectedId
作为personOption
的参数,并利用它可以在Elm中部分应用函数。也就是说,当你给一个函数提供一些但不是所有它需要的参数时,你会得到一个等待其余参数的函数。
首先,将selectedId
添加到personOptions
,如果匹配,则将该选项呈现为选中状态。
personOption : String -> Person -> Html Msg
personOption selectedId person =
option
[ selected (selectedId == person.id)
, value (toString person.id)
]
[ text person.name ]
然后通过在将其传递给personOption
之前为其提供第一个参数来部分应用map
:
personSelect : List Person -> String -> Html Msg
personSelect personList selectedId =
div []
[ select []
(List.map (personOption selectedId) personList)
-- personOption selectedId : String -> Html Msg
]