2010-02-10 10 views
8

que estoy tratando de pasar un par de parámetros a un remoteFunction en griales, pero estoy luchando para formatear correctamenteGriales RemoteFunction params

quiero pasar en el valor de una pieza de información en la página más el valor del cuadro de texto que acabo de pestañas de, por lo que en mi onBlur tengo algo en la línea de:

onblur=${remoteFunction(action:'dave', update:'pack'+it.id, 
     params:[denom:document.getElementById(denomValue+${it.id}).value , 
     amount:this.value ])} 

Esto no compila - tampoco lo hacen las permutaciones que puedo llegar a la números variables de comillas simples y caracteres de escape ..

I thi Lo que realmente me sorprende es que realmente no entiendo lo que intento crear aquí. ¿Es como usar código JSP para crear JavaScript que luego seré ejecutado? ¿Cuándo se evalúa esta expresión, es en el momento en que se compila la página, o es a = en el momento en que se llama a oblur?

Cualquier ayuda muy apreciada.

Respuesta

9

Parece que ha mezclado el código del lado del servidor con el código del lado del cliente.

El código de Grails se evaluará cuando la página se "construya" para ser enviada al navegador del cliente.

El código de Javascript se evaluará una vez que la página se haya entregado en el navegador.

Con esto en mente vamos a echar un vistazo a su onBlur asignación:

onblur=${remoteFunction(
     action:'dave', 
     update:'pack'+it.id, 
     params: [denom: document.getElementById(denomValue+${it.id}).value, 
        amount: this.value ])} 

Dada la $ {...} remoteFunction llamada es una etiqueta Grails, que será evaluado en el servidor, generan una fija cadena, luego ser enviado al cliente. Todo dentro de la llamada debe ser un código válido de Groovy.

Observa el mapa params, que ha añadido algo de JavaScript en el valor denom, dentro del código Groovy:

document.getElementById(denomValue 

continuación, intenta agregar un valor del maravilloso

+${it.id} 

luego algunos Javascript de nuevo

).value 

The Groovy c ompiler intentará evaluar el código Javascript como Groovy y fallará.

Si necesita acceder a los parámetros del lado del cliente en Javascript que necesita para manejar el Javascript a sí mismo (y no utilizar la etiqueta remoteFunction), por ejemplo para manejar la llamada remota:

var path=${createLink(action:'dave', 
         params: [amount:this.value])} 
      + "&denom=" 
      + document.getElementById(denomValue+${it.id}).value 

Usted' También necesitará manejar la respuesta remota usted mismo usando Javascript para actualizar los elementos del 'paquete'. Siempre puede ver lo que genera la llamada a RemoteFunction, copiarlo en la página y editarlo para hacer lo que quiera.

HTH

+0

+1 para la profundidad explicación técnica, que mucha gente se mezcle sucesivamente. Mezclar la comprensión del lado del cliente y del lado del servidor puede ser confuso, especialmente cuando los lenguajes del lado del servidor intentan generar Javascript para usted. Si bien el enfoque de manejar todo en Javascript usted mismo es razonable, el escape adecuado de la respuesta de params puede tener más sentido para los one-offs. –

6

O puede pasar los parámetros separados por '&' como

params:'\'param1=\'+this.value+\'&booleanParam2=true\''

5

En realidad se puede seguir utilizando la etiqueta de la función de control remoto, que acaba de escribir los parámetros en un javascript cadena de objetos, por lo que esto realmente funciona bastante bien en las cosas con las que trabajo.

var denomValue = document.getElementById(denomValue+${it.id}).value; 
onblur=${remoteFunction(
    action:'dave', 
    update:'pack'+it.id, 
    params: '{denom: denomValue, amount: this.value}' 
    )} 
0

he tenido el mismo problema, pero todas las respuestas anteriores no ayudó a que el valor Quiero llegar son el valor seleccionado en el menú desplegable de selección, así como la instancia obj en el interior de mesa que estaba siendo iterado. a continuación fue la solución.

<g:select 
              from="${list}" 
             optionKey="value" 
             optionValue="key" 

             onchange="getValue(this.value, ${instance.id})"/> 

    <script type="text/javascript">  
       function getValue(Id1, Id2) 
       { 

        $.ajax({ 
         type: 'POST', 
         url: '/app/controller/functionToCall', 
         data: { someId: Id1, otherId:Id2}, 

        }); 

       } 
2
<button type="button" class="btn btn-success" id="value-pie" onClick="ajaxFunction(this.value)">Confirmar</button> 

<script> 
function ajaxFunction(id){ 
    var obs = $("#observacion").val() 
    var parameters = { "serieId":id, 
         "observacion":obs 
         } 
    <g:remoteFunction controller="control" 
        action="ajax" 
        method="GET" 
        onSuccess="updateModal(data)" 
        params="parameters"/> 
} 
</script> 
+1

buena respuesta para llamar a javascript con múltiples parámetros –