2009-04-17 16 views
6

Estoy empezando con la elevación y ahora estoy tratando de cambiar una forma normal a una forma ajax pero nunca se llama al método processEntryAdd.Scala lift framework, forma ajax que envía valores múltiples?

def addUser(xhtml : Group) : NodeSeq = { 

    var firstName = "" 
    var lastName = "" 

    def processEntryAdd() { 
     Log.info("processEntryAdd: " + firstName + ", " + lastName) 
    } 

    SHtml.ajaxForm(
     bind("entry", xhtml, 
      "firstName" -> SHtml.text(firstName, 
       (x) => { 
        Log.info("Setting firstName to " + x); 
        firstName = x 
       }), 
      "lastName" -> SHtml.text(lastName, 
       (x) => { 
        Log.info("Setting lastName to " + x); 
        lastName = x 
       }), 
      "submit" -> SHtml.submit("Add user", processEntryAdd), 
     )) 
} 

Cualquier idea de cómo lograr lo que intento hacer, o por qué el código anterior no funciona. Los valores de los dos campos de formulario se envían cuando se presiona el botón y se establecen las dos variables locales firstName y lastName pero no se llama a la función asociada con SHtml.submit.

Gracias!

Respuesta

1

En respuesta a esta pregunta David Pollak sugirió el uso de

"enviar" -> SHtml.hidden ("Añadir usuario", processEntryAdd) ++

en la lista de correo de elevación.

+0

Y eso funciona, pero desafortunadamente doesn resolver todo el problema Una parte del rompecabezas que todavía me falta es volver a representar una parte de la página después de la respuesta ajax. – ivans

9

Esta pregunta es un poco viejo, pero recientemente lo que necesitaba saber esto por mí mismo, y esta es la mejor solución que he visto hasta ahora:

ajaxForm(
    bind("entry", xhtml, 
     "firstName" -> text(firstName, firstName = _), 
     "lastName" -> text(lastName, lastName = _), 
     "submit" -> submit("Add user", processEntryAdd _), 
    ) ++ hidden(processEntryAdd _) 
) 

Al añadir el procesamiento de un formulario elemento oculto que conserve el botón de enviar, sin cambiar ningún código de vista.

Puede añadir el comportamiento del cliente por tener processEntryAdd() devuelve un JsCmd:

def processEntryAdd() { 
    Log.info("processEntryAdd: " + firstName + ", " + lastName) 
    JsRaw("alert('process entry added')") 
} 
+0

Gracias, parece una solución fácil, vamos a intentar pronto. – ivans

+0

En el último fragmento, debe haber un '=' para evitar que 'processEntryAdd' se convierta automáticamente en' Unit'. – Owen

Cuestiones relacionadas