Liftweb:如何在ajaxText提交后执行“scala”方法

时间:2013-06-06 12:28:35

标签: ajax scala lift onsubmit

我知道我可以运行以这种方式提交ajaxText的脚本:

SHtml.ajaxText(myVar, (str) => myVar = str, "onsubmit" -> "myScript();")

我想要做的是改为执行scala方法。

显然

SHtml.ajaxText(myVar, (str) => myVar = str, "onsubmit" -> myMethod)

无效。

我有办法做到这一点吗?

2 个答案:

答案 0 :(得分:2)

您的回答对我来说很好,但如果您在执行后不想要任何事情发生,那么您不必让JsCmd做任何事情。例如:

SHtml.ajaxText(myVar, (str) => {
  myVar = str
  myMethod()
  JsCmds.Noop
})

JsCmds.Noop与普通JavaScript中发布return几乎相同,因此函数返回时不做任何事情。为简洁起见,我将代码块内联,但您也可以使用(str) => f(str)执行操作并让方法返回JsCmds.Noop

答案 1 :(得分:1)

我找到了办法,但不是那么干净。

因为函数(str) => myVar = str也在提交时执行,这就是我所做的:

def f(str:String):JsCmd = {
  myVar = str
  myMethod()
  SetHtml("msg_div",<span> method executed </span>)
}

SHtml.ajaxText(myVar, (str) => f(str))

这样每次我在ajaxText myMethod中提交修改时都会执行,但我不得不从JsCmd函数返回一些f

如果您找到更好的方法,请告诉我。