如何在榆树中识别出另一个事件

时间:2016-02-11 02:10:43

标签: elm

我有一个div,其中包含以下操作来模仿菜单

div
  [ onClick address Toggle
  , onFocus address Open
  , onBlur address Close
  ]
  [ ... some items with click handlers ]

当一个标签显示div时,它会有焦点并执行显示菜单的Open

当它失去焦点时,会引发onBlur并执行隐藏菜单的Close

点击后,它会在OpenClose之间切换。

这很好但有一些问题

方案

  1. 当用户点击div时,会触发打开菜单的onFocus
  2. 然后触发onClick,执行切换,从而关闭菜单。
  3. 如何在onClick之后识别onFocus以便不切换菜单?如果没有,在Elm中处理这种情况的最佳方法是什么。

    如果用户选中div然后点击它,这可以正常工作。由于它已经具有焦点,因此它可以按预期进行切换和行为。

1 个答案:

答案 0 :(得分:1)

我建议删除Toggle操作。它没有必要,只会引起混淆,因为它忽视了当前的状态。

相反,你可能已经在你的模型中找到了一些跟踪div当前是否打开的东西,因为我认为你基于这个事实的风格不同。对于这个例子,我假设你的模型看起来像这样:

type alias Model =
  { open : Bool }

然后,您可以移除Toggle操作并更改onClick处理程序,以根据当前状态发送OpenClose操作。

div
  [ onClick address (if model.open then Close else Open)
  , onFocus address Open
  , onBlur address Close
  ]
  [ ... some items with click handlers ]

这使您有可能连续触发两个Open个动作,但 应该可以,因为第二个Open本质上是一个 - op并且根本不会改变已经开放的模型。