Scala lift框架,提交多个值的ajax表单?

iva*_*ans 6 ajax scala lift ajax-forms

我刚刚开始使用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),
        ))
}
Run Code Online (Sandbox Code Playgroud)

任何想法如何实现我想要做的,或为什么上面的代码不起作用.按下按钮时会提交两个表单字段的值,firstName并且lastName设置了两个局部变量,但未调用与SHtml.submit关联的函数.

谢谢!

Erl*_*sen 9

这个问题有点陈旧,但我最近需要自己知道,这是我迄今为止看到的最佳解决方案:

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

通过将处理添加到隐藏表单元素,您可以保留提交按钮,而无需更改任何视图代码.

您可以通过让processEntryAdd()返回JsCmd来添加客户端行为:

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


Ale*_*ett 1

在回答这个问题时,David Pollak 建议使用

"提交" -> SHtml.hidden("添加用户", processEntryAdd) ++

在电梯邮件列表上。