У меня есть этот код, и он работает:
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, а не его оценочное значение.Обычно, когда я получаю что-то подобное с Лифтом, это потому, что я делаю это так, что намного сложнее, чем мне нужно. Кто-нибудь знает, как это сделать? Должен быть способ передать значение идентификатора элемента caller для Lift.
Ответ заключался в создании пользовательского события! (Мне потребовалось некоторое время, чтобы разобраться.)
С этим дополнительным 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. Это было трудно понять, но было легко сделать.