我正在寻找一种方法来根据任何输入中的valueChange更新任意数量的UI.input。
这是一个只有两个输入的玩具示例:
import qualified Graphics.UI.Threepenny as UI
import Graphics.UI.Threepenny.Core
import Graphics.UI.Threepenny.JQuery
main :: IO ()
main = do
startGUI defaultConfig setup
return ()
setup :: Window -> UI ()
setup w = do
textboxes <- do
tb1 <- UI.input
tb2 <- UI.input
update1 <- stepper "red" $ UI.valueChange tb1
update2 <- stepper "green" $ UI.valueChange tb2
element tb1 # sink value (fmap reverse update2)
element tb2 # sink value (fmap reverse update1)
return $ column [return tb1, return tb2]
getBody w #+ [textboxes]
return ()
将其中一个文本框中写入的内容复制(反转)到另一个文本框中。
现在,如果我想要一个任意长度的输入UI列表,并且写入任何输入的任何内容被复制到所有其他输入中,该怎么办?我可以很容易地创建一个UI列表,但我如何阅读它们,将一个函数应用到它们的输入(如反向),然后将更改汇入所有其他的?
有什么想法吗?
答案 0 :(得分:0)
我对你提到的几乎所有内容都不熟悉,但你能否利用monadic结构和一些标准函数来做这样的事情:
textboxes <- do
tbs <- replicateM 3 UI.input
forM_ tbs $ \tbX -> do
update <- stepper "_" $ UI.valueChange tbX
forM_ tbs $ \tbY -> do
element tbY # sink value (fmap reverse update)
return $ column (map return tbs)
stepper
参数是静态的,我认为在更新时你需要一种方法来跳过触发控件,但是从两个控件到控件列表的概括,我认为这可能是正确的方向?