Scala Lift Framework, форма ajax, которая представляет несколько значений? - PullRequest
6 голосов
/ 17 апреля 2009

Я только начинаю работать с 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 ]

9 голосов
/ 10 сентября 2009

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

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')")
}
1 голос
/ 04 января 2011

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

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

"отправить" -> (SHtml.hidden (auth) ++ )

1 голос
/ 23 апреля 2009

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

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

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

...