我有这段代码并且有效:
def render =
"#liftScript" #> Script(JqJsCmds.JqOnLoad(
JqJE.Jq("#plus") ~> JqJE.JqClick(
js.JE.AnonFunc(SHtml.jsonCall(
JE.Call("myJsFnuc"), plus _
))
) &
JqJE.Jq("#minus") ~> JqJE.JqClick(
js.JE.AnonFunc(SHtml.jsonCall(
JE.Call("myJsFunc"), minus _
))
)
).cmd)
如果我正在编写自己的JavaScript,我就这样做:
$("#minus, #plus").click(function() {
myCallback(myJsFunc(), $(this).attr("id"));
// Or, if my callback must take no more than one argument:
myCallback([myJsFunc(), $(this).attr("id")]);
});
我试图用Lift做到这一点,但我还没有接近成功。我尝试了一个像以下那样的咖喱回调:
def myCallBack(caller: String)(data: JValue) = ...
但我遇到了两个问题。
jQuery("this").attr("id")
,换句话说,它是JavaScript代码,而不是其评估值。通常情况下,当我得到类似错误的提升时,它是因为我以比我需要做的更难的方式做这件事。有谁知道这是怎么回事?必须有办法将调用者元素的ID值传递给Lift。
答案 0 :(得分:0)
答案是创建一个自定义事件! (这让我花了一些时间来弄明白。)
使用这个额外的JavaScript:
$(function () {
$('#plus, #minus').click(function () {
$('body').trigger('customEvent', [[myJsFunc(), $(this).attr('id')]]);
});
});
然后我可以在Lift中执行此操作:
def render =
"#liftScript" #> Script(JqJsCmds.JqOnLoad(
JqJE.Jq("body") ~> JE.JsFunc("on", JString("customEvent"),
JE.AnonFunc("event, value", SHtml.jsonCall(
JE.JsRaw("value"), processData _
))
)
).cmd)
完成并完成。 Phfew。这很难弄清楚,但很容易做到。