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

时间:2009-04-17 11:47:30

标签: 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),
        ))
}

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

谢谢!

3 个答案:

答案 0 :(得分:9)

这个问题有点陈旧,但我最近需要了解这个问题,这是迄今为止我见过的最佳解决方案:

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 :(得分:1)

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

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

在电梯邮件列表上。

答案 2 :(得分:1)

这是答案,滚动到底部,(忽略<之后的第一个空格)

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

“提交” - > (SHtml.hidden(auth)++< input type =“submit”value =“Login”/>)