Реактивный-банан реактивный, чтобы получить виджет textCtrl Value, например textCtrlGetValue

Я хотел бы получить значение виджета.

Далее, нажав кнопку b, найдите s_in и распечатайте его на собственном wxhaskell.

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

Мне нравится делать то же самое на реактивном банане, но в следующем я получаю "ff", а не textCtrlGetValue s_in2

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

раковина хорошо обновляется sin_2 после s_in . но следующая повторная строка не дает мне textCtrlGetValue s_in/ b_in, который я хочу получить. как я могу "получить" это?

1 ответ

Решение

Поведение, полученное с behaviorText Функция будет реагировать только на изменения, внесенные пользователем в поле ввода. Он не включает программные изменения, подобные тем, которые были выполнены с sink функция.

Различие между пользовательскими событиями и программными событиями необходимо для написания адаптивных элементов пользовательского интерфейса, которые имеют двунаправленный поток данных. Смотрите пример CurrencyConverter для демонстрации.

Если вы хотите отслеживать программные изменения, я рекомендую оставаться "в мире FRP", то есть использовать поведение b_out = id <$> b_in вместо того, чтобы пытаться читать текст из виджета.

(Кстати, id <$> x = x.)

Другие вопросы по тегам