2011-07-01 17 views
6

Jak uzyskać zawartość elementów interfejsu użytkownika przy korzystaniu z reaktywnego banana? Zdarzenie0 zwraca zdarzenie typu Event(), które ma typ jednostki zamiast typu kontrolki. zdarzenie 1 przyjmuje zdarzenie typu Event w (a -> IO()), ale polecenie jest typu Event w (IO()). mapAccumE i mapAccumB pobiera czyste funkcje jako parametry, więc get text foo nie może być z nimi używany.Wejście interfejsu użytkownika z reaktywnym bananem-wx

Odpowiedz

4

Zasadniczo, chcesz pracować z funkcjami zamiast danymi. Jeśli myślisz "Jak utworzyć zachowanie, które ma aktualny tekst w pudełku", nie. Zamiast tego piszemy funkcje, które pobierają bieżący tekst jako parametr i przekazują go, gdy jest to konieczne. Załóżmy, że chcesz wydrukować zawartość pola tekstowego po naciśnięciu przycisku. Wtedy byś zrobił coś takiego:

eButton :: NetworkDescription (Event()) 
eButton = event0 button command 

network = do 
    pressButton <- eButton 
    reactimate $ (\() -> get text foo >>= print) <$> pressButton 

Jeśli trzeba uzyskać wkład w zachowanie, można podobnie użyć funkcji z rodzaju Behavior (String -> a) (lub niezależnie od typu trzeba), a następnie po prostu przekazać ciąg w co punkt połączenia reactimate.

4

(Autor reactive-banana mówienia. Przepraszamy za opóźnienie w odpowiedzi, możliwość pytania zadawane są tu nawet nie krzyż mój umysł. :-))

odkryłem dzisiaj, że pominięto bardzo ważna cecha z biblioteka: pobieranie zawartości elementu interfejsu użytkownika jako Behavior. Zakłopotanie! :-D

John opisuje bieżące obejście, ale następna wersja reaktywnego banana będzie zawierać brakującą funkcję.

Edycja: opublikowali reaktywnych banana version 0.4 który obecnie zawiera funkcjonalności w postaci funkcji

fromPoll :: IO a -> NetworkDescription (Behavior a) 
Powiązane problemy