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



我知道我可以运行一个脚本提交一个ajaxText:

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

我想做的是执行一个scala方法。

显然

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

不工作

我可以这样做吗?

你的答案对我来说很好,但是如果你不想在执行后发生任何事情,你不必让JsCmd做任何事情。例如:

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

其中的JsCmds.Noop,与在纯JavaScript中发出return几乎相同,因此该函数返回而不做任何事情。为了简洁起见,我将代码块内联,但是您也可以只做您对(str) => f(str)所做的事情,并让您的方法返回JsCmds.Noop

我找到了一个方法,但不是那么干净。

由于函数(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被执行,但我被迫返回一些JsCmdf函数。

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

最新更新