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) ++ )