problema con griffon
Hola q tal comunidad estoy teniendo un problema algo extraño con griffon y trata en que no puedo enviar argumentos a los closures del controller desde la vista lo intente desde un actionperformed y tambien desde las actions que maneja este marco , sin embargo si funcionan sin tener argumentos , en los closures hago pruebas con un println it y obtengo null , por el momento tengo que recurrir a la referencia view.dato dentro del closure del controlador.
- es decir (controller.miclosure ) funciona.
- y controller.miclosure('cadena') funciona pero con un println it dentro del closure imprime null.
- julgo's blog
- Inicie sesión o regístrese para enviar comentarios
Postea tu código
Así alguien te podría ayudar.
no adjunte el codigo por que
no adjunte el codigo por que el problema lo escribi asumiendo que era tan literal que no era necesario pero aqui va el codigo y un poco mas de explicacion .
en la groovyConsole pruebo esto y me funciona
-por cierto tambien digamos de cierta forma "descubri" que si no enviamos argumentos al closure no es necesario las llaves {...} ni los parentesis(..) , pero en el ejemplo sin las llaves provocaria un error;
pero esto no es mi problema , el problema es como lograrlo en griffon donde invocar los closures sin argumentos me resulta valido ,pero el ejemplo anterior no.
- este es el codigo en griffon
// la vista view
y el codigo del controlador
el resultado de los eventos imprime null.
-encontre una solucion justo cuando escribia este post y lo hize a traves de un metodo y no un closure , incluso en el libro griffon in action en sus ejemplos utilizan closures no entiendo por que pasa esto pero aqui va la solucion
codigo del controlador
Tal vez esto te sirva
un vistazo a Griffon
closures vs métodos
La diferencia entre closures y métodos es que los closures pueden ser invocados con cualquier cantidad de argumentos mientras que la invocación a un método debe incluir tantos argumentos como parámetros tenga definido dicho método.
En cuanto a que no sea necesario incluir llaves si no incluyes parámetros: creo que estás un poco confundido en algunos conceptos. En tu primer ejemplo:
lo que estás haciendo es pasar a
un closure dentro del cual invocas a controller.imprime.
Si le quitas las llaves:
Entonces estás pasando una referencia al closure
del objeto
y ese closure se ejecutará cuando oprimas el botón, y recibirá los dos argumentos correspondientes a los parámetros de
.
si de acuerdo
-entiendo la diferencia entre los closures y metodos , aunque en cierto sentido un metodo podria recibir argumentos variables ,a pesar que no seria del todo exacto llamarlo asi, simularia esta caracteristica de los closures en la forma de invocarlos ; mas en el metodo mismo los argumentos son recibidos dentro de un array , en realidad el compilador nos ahorra el trabajo de crear el array con el tamaño de los argumentos en cada llamada por ejemplo :
-
si olvide la referencia es por eso que
provocaria un error a pesar de invocarlo sin parametros si es que no retorna un closure.
- en cuanto a griffon sigo sin entender por que no se comporta como en el primer ejemplo que publique ya que la vista tiene referencias tanto del controlador como del modelo.
-tampoco entendi la ultima parte de recibir los dos argumentos correspondientes a los parametros , supongo que por la prisa tal ves ya que mencionabas el closure dentro del actionPerformed =
versiones
Qué versión de Griffon usan en el libro y cuál estás usando tú? si es una más reciente, lee las notas de esa versión para ver qué cosas cambiaron.
si pensé en las versiones
si pensé en las versiones pero es una característica tan básica que no crei que variara de versión en versión , será que estoy usando Windows jejeje , recuerdo que probe con dos versiones de griffon, me recuerda un problema que tuve con el apache derby que se instala junto a netbeans, por mas que configuraba firewall , variables de entorno, conexiones directas sin uso de netbeans, etc .y probaba no podía conectarme pero luego de eliminar por completo tanto netbeans como el jdk y volver instalarlo funcionaba perfecto, por ahora vere otros proyectos , de todas maneras mas adelante comenzare de cero y comentare que tal me fue.