Scala Lift Framework, форма ajax, которая представляет несколько значений?

Я только начинаю работать с lift и сейчас пытаюсь изменить нормальную форму на форму ajax, но метод processEntryAdd никогда не называется.

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

Любая идея, как добиться того, что я пытаюсь сделать, или почему приведенный выше код не работает. Значения двух полей формы передаются при нажатии кнопки и двух локальных переменных firstName а также lastName установлены, но функция, связанная с SHtml.submit, не вызывается.

Спасибо!

3 ответа

Этот вопрос довольно старый, но я недавно должен был сам это знать, и это лучшее решение, которое я видел до сих пор:

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

Добавляя обработку к скрытому элементу формы, вы получаете возможность удерживать кнопку отправки без изменения кода представления.

Вы можете добавить поведение на стороне клиента, если processEntryAdd() вернет JsCmd:

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

В ответ на этот вопрос Дэвид Поллак предложил использовать

"submit" -> SHtml.hidden("Добавить пользователя", processEntryAdd) ++

в списке рассылки лифта.

Вот ответ, прокрутите вниз, (пропустите первый пробел после <)

http://www.assembla.com/wiki/show/liftweb/ajaxForm

"submit" -> (SHtml.hidden (auth) ++ )

Другие вопросы по тегам