问题描述
我有一个下拉菜单,它使用键盘向下箭头将文本显示为 moredetails,单击它会展开,我可以看到必填字段。我想要实现的是在辅助字段扩展时单击按钮一次我想将文本更改为“较少细节”,我能够实现直到扩展键盘向下箭头标记变为键盘向上箭头标记。 这是我的代码
Html.span
[ Attributes.class "details" ]
[ Html.a
[ Attributes.href "#",Events.onClick (ExpandDetails tx.id)]
[ Html.text "More detail",Html.i
[ Attributes.class "material-icons" ]
[ if expanded then
Html.text "keyboard_arrow_up"
else
Html.text "keyboard_arrow_down"
]
]
]
我可以一直到如果展开显示向下箭头,但随之而来的是我需要将文本从更多细节更改为更少细节,点击更少细节时它应该回到更多细节。
解决方法
如果我理解正确,您可以在下拉代码之前在 let
expression 中定义按钮和文本。类似的东西:
let
( dropdownButton,dropdownText ) =
if expanded then
( "keyboard_arrow_up","Less details" )
else
( "keyboard_arrow_down","More details" )
in
Html.span [ Attributes.class "details" ]
[ Html.a
[ Attributes.href "#",Events.onClick (ExpandDetails tx.id)
]
[ Html.text dropdownText,Html.i [ Attributes.class "material-icons" ]
[ Html.text dropdownButton ]
]
]
,
这是另一种选择。
将链接移动到以 String
为参数的函数中。
viewDetails : Tx -> Bool -> Html Msg
viewDetails tx expanded =
let
lessOrMoreLink =
if expanded then
viewExpandLink "Less" "keyboard_arrow_up"
else
viewExpandLink "More" "keyboard_arrow_down"
in
Html.span
[ Attributes.class "details" ]
[ lessOrMoreLink tx.id ]
viewExpandLink : String -> String -> Int -> Html Msg
viewExpandLink txt arrow id =
Html.a
[ Attributes.href "#",Events.onClick (ExpandDetails id)
]
[ Html.text (txt ++ " details"),Html.i
[ Attributes.class "material-icons" ]
[ Html.text arrow ]
]