0

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

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

所以我尝试onClick在接受时发送 2 个事件。一个用于接受逻辑,一个用于隐藏逻辑。这不起作用,只是第一个事件起作用了。

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

人们似乎建议做一个HideAndLogic事件,但这会导致大量复制和粘贴隐藏代码,每个逻辑一个。另外,逻辑将与隐藏逻辑联系在一起,这将使其更难理解。如果我想为逻辑发送一个事件而不隐藏任何内容,我将不得不制作另一个复制第一个逻辑一半的事件。这违背了基本的编程良好实践,所以我认为有些人可能已经找到了更好的方法。一种允许这些单独的逻辑即使在祖先事件中也能真正分离的方法。

使用榆树 0.18

4

1 回答 1

3

我认为你让这太复杂了。你需要:

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

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

于 2018-09-20T18:45:30.137 回答