Реактивный-банан реактивный, чтобы получить виджет 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
.)