我刚开始使用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关联的函数。
谢谢!
答案 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”/>)