我正在尝试制作一个通用模式,该模式将要显示的文本和要在接受按钮的onClick
上发送的事件作为参数。
有一个取消按钮,与接受按钮共享隐藏功能。
因此,我尝试在接受的onClick
上发送2个事件。一种用于接受逻辑,一种用于隐藏逻辑。而且那没有用,只是第一个事件在起作用。
我尝试了另一种策略,隐藏事件可能有一个事件
OnHideModal (Maybe Msg)
使得模式在接受之前合并两个事件,而OnHide
隐藏模式并发送内部事件以继续处理。
在我看来,这太重了,因为如果您有3个或更多的逻辑事件,那么所有事件都必须有另一个Maybe Msg
。而且我很难为内部事件做一个Cmd Msg
。
人们似乎建议做一个HideAndLogic
事件,但这会导致大量隐藏代码的复制和粘贴,每种逻辑一个。
再加上逻辑将与隐藏逻辑联系在一起,这将使它更难理解。而且,如果我想发送逻辑事件而不隐藏任何内容,那么我将不得不制作另一个事件,该事件复制第一个逻辑的一半。这与基本编程的良好做法背道而驰,因此我认为某些人可能已经找到了更好的方法。
一种即使在祖细胞事件中也可以真正分离这些单独逻辑的方法。
使用榆木0.18
答案 0 :(得分:3)
我认为您使这一过程变得太复杂了。 您需要:
viewModal : msg -> msg -> Html msg
viewModal acceptMsg cancelMsg =
div [] [ ... button [onclick acceptMsg] ...
... button [onclick cancelMsg] ...
]
然后,您的主模型需要使用shouldShowModal : Bool
或其他方法来决定是否应显示模态。
该模式将触发一个消息,您将在事件循环中处理该消息。