我正在尝试用三便士来了解FRP。
我想生成包含用户输入的事件,并在每次单击按钮时触发。您可以在github上看到代码。
我尝试使用函数
submitEvents :: Element -> Element -> UI (Event String)
submitEvents button input = do val <- get value input
return $ val <$ (UI.click button)
它稍后会在do块中使用。
nameE <- submitEvents loginButton userNameInput
currName <- stepper "Ash" nameE
element currNameElem # sink text currName
但它最终只是在第一次点击后成为空字符串。在此之前它按预期包含值“Ash”。我认为发生的是在生成事件流时提取输入的值,而不是每次点击一次。我环顾了文档,没有看到m a -> Event () -> m (Event a)
的任何内容,但我对frp很新,可能错过了什么。
答案 0 :(得分:1)
哦,我明白了。我正在构建UI.valueChange
所需的内容。
submitEvents :: Element -> Element -> UI (Event String)
submitEvents button input = do currVal <- stepper "" $ UI.valueChange input
return $ currVal <@ (UI.click button)
效果很好。我不确定是否有一种更有效的方式只能在按下按钮时查看它。如果有人找到更好的答案,我会打开这个问题。