2017-06-02 2 views
2

どの入力でもvalueChangeに基づいて任意の数のUI.inputを更新する方法を探しています。ここでn個のUI値のリストを更新する

はちょうど2つの入力を備えた玩具の例である:

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にコピーされますか?私はUIのリストを簡単に作成することはできますが、それらをすべて読み、その入力に関数を適用し(逆のように)、その変更を他のすべての関数にシンクさせるにはどうすればよいですか?

どのような考えですか?

答えて

0

私はあなたが言及したほとんど何に慣れていないんだけど、あなたはこのような何かをモナドの構造といくつかの標準的な機能を利用することができるだろう:

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引数が静的です更新時にトリガーコントロールをスキップする方法が必要だと思いますが、2つのコントロールからコントロールのリストに一般化することで、これが正しい方向になると思いますか?

関連する問題