when (c == 13) $ void $ do trigger UI.click button 也就是-6ren">
gpt4 book ai didi

haskell - 单击 "Enter"按键上的按钮

转载 作者:行者123 更新时间:2023-12-01 04:59:43 24 4
gpt4 key购买 nike

我想要这样的东西:

on UI.keydown textfield $ \c -> when (c == 13) $ void $ do
trigger UI.click button

也就是说,是否有类似 trigger 的东西?我刚刚插入的功能?

最佳答案

为了将 Enter 按键的处理视为按钮点击,您不需要按字面意思触发点击。相反,您需要一个在按键或点击发生时触发的事件。最简单的方法是通过 unionWith ,特别是如果您已经在使用 Threepenny 的 FRP 组合器(我衷心推荐)。 .有了这个和其他一些 Reactive.Threepenny组合器,代码可能如下所示:

-- I'm giving separate names to the events for extra clarity.
let eClick = UI.click button
eEnter = void $ filterE (== 13) (UI.keydown textfield)
-- This event is fired whenever `eClick` or `eEnter` happen.
eGo = unionWith const eClick eEnter

那你只要处理 eGo , 使用 onEvent ,以您处理点击事件的方式。

请注意,本着您问题中伪代码精神的替代解决方案是定义 eGo通过 newEvent 然后使用触发器函数触发 on 中的事件单击和按键的处理程序:
-- Assuming you are in an `UI` do-block, thus the `liftIO`.
(eGo, fireGo) <- liftIO newEvent
on UI.click button $ \_ -> fireGo ()
on UI.keydown textfield $ \c -> when (c == 13) (fireGo ())
-- Alternatively, you might define an `eEnter` with `filterE`,
-- as in the first example, instead of using `on` and `when`.

这不像第一个解决方案那么好,因为它有点困惑,并且在 FRP 代码中运行得不那么流畅。我不会推荐它,除非您根本不使用 FRP 组合器。

关于haskell - 单击 "Enter"按键上的按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34056866/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com