2009-04-17 7 views
6

Właśnie zaczynam od windy i teraz próbuję zmienić normalną formę na formularz ajax, ale metoda processEntryAdd nigdy nie jest wywoływana.Scala lift framework, formularz ajax, który przesyła wiele wartości?

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

Każdy pomysł, jak osiągnąć to, co próbuję zrobić, lub dlaczego powyższy kod nie działa. Wartości dwóch pól formularza są przesyłane po naciśnięciu przycisku i ustawieniu dwóch zmiennych lokalnych firstName i lastName, ale funkcja skojarzona z SHtml.submit nie jest wywoływana.

Dzięki!

Odpowiedz

1

W odpowiedzi na to pytanie David Pollak zasugerował użycie

"submit" -> SHtml.hidden ("Dodaj użytkownika", processEntryAdd) ++

na liście wyciąg korespondencji.

+0

I to działa, ale niestety nie robi nie rozwiązuje całego problemu. Częścią układanki, której wciąż brakuje, jest ponowne renderowanie części strony po odpowiedzi ajaxowej. – ivans

9

To pytanie jest trochę stary, ale niedawno musiał wiedzieć ten sam, i to jest najlepsze rozwiązanie widziałem do tej pory:

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

Dodając przetwarzanie do ukrytej formy elementu, dostać przycisk przesyłania, bez zmiany żadnego kodu widoku.

Możesz dodać klienta zachowanie bocznego poprzez processEntryAdd() zwraca JsCmd:

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

Dzięki, wygląda na to, że jest to proste rozwiązanie, wkrótce wypróbujesz. – ivans

+0

W ostatnim fragmencie, powinno być '=', aby zapobiec, że 'processEntryAdd' automatycznie stanie się' Jednostką'. – Owen

Powiązane problemy