与消息无关的问题

时间:2018-09-20 16:36:08

标签: events elm elm-architecture

我正在尝试制作一个通用模式,该模式将要显示的文本和要在接受按钮的onClick上发送的事件作为参数。

有一个取消按钮,与接受按钮共享隐藏功能。

因此,我尝试在接受的onClick上发送2个事件。一种用于接受逻辑,一种用于隐藏逻辑。而且那没有用,只是第一个事件在起作用。

我尝试了另一种策略,隐藏事件可能有一个事件 OnHideModal (Maybe Msg)使得模式在接受之前合并两个事件,而OnHide隐藏模式并发送内部事件以继续处理。 在我看来,这太重了,因为如果您有3个或更多的逻辑事件,那么所有事件都必须有另一个Maybe Msg。而且我很难为内部事件做一个Cmd Msg

人们似乎建议做一个HideAndLogic事件,但这会导致大量隐藏代码的复制和粘贴,每种逻辑一个。 再加上逻辑将与隐藏逻辑联系在一起,这将使它更难理解。而且,如果我想发送逻辑事件而不隐藏任何内容,那么我将不得不制作另一个事件,该事件复制第一个逻辑的一半。这与基本编程的良好做法背道而驰,因此我认为某些人可能已经找到了更好的方法。 一种即使在祖细胞事件中也可以真正分离这些单独逻辑的方法。

使用榆木0.18

1 个答案:

答案 0 :(得分:3)

我认为您使这一过程变得太复杂了。 您需要:

viewModal : msg -> msg -> Html msg 
viewModal  acceptMsg  cancelMsg = 
  div [] [ ... button [onclick acceptMsg] ...
           ... button [onclick cancelMsg] ...
         ]

然后,您的主模型需要使用shouldShowModal : Bool或其他方法来决定是否应显示模态。
该模式将触发一个消息,您将在事件循环中处理该消息。