4

ウィジェットの値を取得したいのですが。

以下では、ボタンbを押してs_inを取得し、ネイティブwxhaskellで印刷します。

b <- button f [text:= "print text in console", 
               on command := textCtrlGetValue s_in >>= putStrLn]

私はreactive-bananaでも同じことをするのが好きですが、以下では、s_in2のtextCtrlGetValueではなく「ff」を取得します。

s_in  <- textCtrl f  []
s_in2 <- textCtrl f  []

b <- button f [text:= "print text in console", 
               on command := textCtrlGetValue s_in >>= putStrLn]



let networkDescription :: forall t. Frameworks t => Moment t ()
    networkDescription = do

    b_in  <- behaviorText s_in "init"
    b_in2 <- behaviorText s_in2 "ff"
    e_butt <- event0 b command


    -- I need an event, triggered by the button, and filled by the b_in2, 

    sink s_in2 [text :== id <$> b_in]     

    reactimate $   (\x -> putStrLn x)  <$> b_in2 <@ e_butt

シンクはs_inの後にsin_2を更新します。しかし、次の反応行では、取得したいs_in/b_inのtextCtrlGetValueが取得されません。どうすればそれを「取得」できますか?

4

1 に答える 1

3

この関数で得られる動作は、ユーザーが編集ボックスbehaviorTextに加えた変更にのみ反応します。関数で実行されるようなプログラムによる変更は含まれませsink

ユーザーイベントとプログラムイベントを区別することは、双方向のデータフローを持つレスポンシブUI要素を作成するために不可欠です。デモについては、 CurrencyConverterの例を参照してください。

プログラムによる変更を追跡したい場合は、「FRPの世界内」にとどまるようにすることをお勧めします。つまりb_out = id <$> b_in、ウィジェットからテキストを読み取ろうとするのではなく、動作を使用することをお勧めします。

(ちなみに、id <$> x = x。)

于 2013-03-25T10:05:14.677 に答える