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关联的函数.
谢谢!
这个问题有点陈旧,但我最近需要自己知道,这是我迄今为止看到的最佳解决方案:
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)