2009-04-17 10 views
6

Ho appena iniziato con l'ascensore e ora sto provando a cambiare un modulo normale in un modulo Ajax ma il metodo processEntryAdd non viene mai chiamato.Scala lift framework, modulo Ajax che invia più valori?

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), 
     )) 
} 

Qualsiasi idea su come ottenere ciò che sto cercando di fare, o perché il codice sopra non funziona. vengono sottoposti I valori dei due campi di modulo quando si preme il pulsante e le due variabili locali firstName e lastName sono impostati ma la funzione associata con SHtml.submit non viene chiamato.

Grazie!

risposta

1

In risposta a questa domanda David Pollak suggerito utilizzando

"submit" -> SHtml.hidden ("Aggiungi utente", processEntryAdd) ++

sul sollevatore mailing list.

+0

E che funziona, ma purtroppo non lo fa risolve l'intero problema Una parte del puzzle che mi manca ancora è il re-rendering di una parte della pagina dopo la risposta ajax. – ivans

9

Questa domanda è una specie di vecchio, ma di recente ho bisogno di sapere questo me stesso, e questa è la soluzione migliore che ho visto finora:

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

Aggiungendo la trasformazione ad una forma elemento nascosto voi arrivare a mantenere il pulsante di invio, senza modificare alcun codice di visualizzazione.

È possibile aggiungere un comportamento lato client avendo processEntryAdd() restituiscono un JsCmd:

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

Grazie, questa sembra una soluzione semplice, che verrà presto testata. – ivans

+0

Nell'ultimo snippet, ci dovrebbe essere un '=' per evitare che 'processEntryAdd' diventi automaticamente' Unità'. – Owen