2011-07-01 9 views
6

¿Cómo se obtiene el contenido de los elementos de la interfaz de usuario cuando se usa plátano reactivo? El evento0 devuelve un evento del tipo Event(), que tiene el tipo de unidad en lugar del tipo del control. event1 toma un evento de tipo Event w (a -> IO()), pero el comando es del tipo Event w (IO()). mapAccumE y mapAccumB toman funciones puras como parámetros, por lo que get text foo no se pueden usar con ellos.Entrada de interfaz de usuario con reactive-banana-wx

Respuesta

4

Básicamente, desea trabajar con funciones en lugar de datos. Si está pensando "¿Cómo creo un comportamiento que tenga el texto actual en un recuadro?", No es así. En su lugar, escribe funciones que toman el texto actual como parámetro y lo transfiere cuando es necesario. Supongamos que desea imprimir el contenido de un cuadro de texto cuando se presiona un botón. De allí tendría que hacer algo como esto:

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

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

Si usted necesita para obtener de entrada en un comportamiento, puede igualmente utilizar una función con el tipo Behavior (String -> a) (o lo que sea el tipo que necesita), y luego simplemente pasar la cadena en por lo el punto de la llamada reactimate.

4

(Autor de reactive-banana hablar. Lo siento por la respuesta tardía, se pide a la posibilidad de preguntas aquí ni siquiera me pasó por la mente. :-))

descubrí hoy que omití una característica muy importante de la biblioteca: obtener el contenido de un elemento de la interfaz de usuario como Behavior. Embarazoso! :-D

John describe la solución actual, pero la próxima versión de reactive-banana incluirá la característica que falta.

EDIT: he liberado reactiva-banana version 0.4 que ahora incluye la funcionalidad en forma de una función

fromPoll :: IO a -> NetworkDescription (Behavior a) 
Cuestiones relacionadas