Question

I know that I can run a script submitting an ajaxText this way:

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

What I would like to do is to execute a scala method instead.

Obviously

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

is not working.

Is there a way I can do this?

Était-ce utile?

La solution

Your answer looks fine to me, but if you don't want anything to happen after executing, you don't have to have the JsCmd do anything. For example:

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

Where the JsCmds.Noop, is pretty much the same as issuing return in plain JavaScript, so the function returns without doing anything. I put the codeblock inline for brevity, but you could also just do what you did with (str) => f(str) and have your method return JsCmds.Noop.

Autres conseils

I found a way, but is not so clean.

since the function (str) => myVar = str is also executed on submit, that's what I've done:

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

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

This way every time I submit a modification in ajaxText myMethod is executed but I'm forced to return some JsCmd from the f function.

If you find a better way to do that let me know please.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top