2013-03-24 6 views
4

Я хотел бы получить значение виджета.Реактивно-банановая реакция на получение виджета textCtrl Значение, подобное 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, который я хочу получить. как я могу «получить» это?

ответ

3

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

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

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

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

+0

Сначала спасибо за быстрый ответ. Я заметил двунаправленный поток данных и задался вопросом, почему в то время это не было циклом! Теперь, я знаю, спасибо! Раньше я не замечал этого важного разделения понятий. Теперь другая тема, которую я пересек ([документально здесь] (http://stackoverflow.com/questions/15758975/separating-state-for-a-model-and-gui-io-wx-stack-or-frp)), является тем, как могу ли я использовать модель и графический интерфейс, имея в виду, что модель не является графическим или WX-специфическим (_ в этом примере график не является графиком зависимостей виджета (типичным в FRP), а графиком диаграммы для представления_) –