在JavaScript中,特别是在jQuery中,通常使用文字参数进行函数调用,并将该参数的字段作为内联匿名函数。像这样:
$(function () {
$("#mylist").sortable({
placeholder: "ui-state-highlight",
stop: function () { alert('Hello!'); }
});
});
是否可以通过Lift进行此类通话?就我而言:
"#jsonScript" #> Script(js.jquery.JqJsCmds.JqOnLoad(
js.jquery.JqJE.Jq("#mylist") ~> js.JE.JsFunc("sortable", JObject(
JField("placeholder", JString("ui-state-highlight")) ::
JField("stop", js.JE.AnonFunc(js.JsCmds.Alert("Hello!"))) ::
Nil
))
))
编译器抱怨AnonFunc
不是JValue
,这是绝对正确的:事实并非如此。但在JavaScript中,function () {}
调用是文字对象字段的合法值。我怎么能让Lift知道呢?
这里的长期目标是让函数体最终成为:
SHtml.jsonCall( JE.Call("jsFunction"), liftFunction _ )
答案 0 :(得分:1)
以下是我回答想要将Lift与jquery autocomplete集成在一起的人的回答,该问题使用类似的回调方法:Lift - Autocomplete with Ajax Submission
答案 1 :(得分:1)
我需要使用JsObj:
def render =
"#jsonScript *" #> js.jquery.JqJsCmds.JqOnLoad(
js.jquery.JqJE.Jq("#mylist") ~> js.JE.JsFunc("sortable", js.JE.JsObj(
("placeholder", "ui-state-highlight"),
("stop", js.JE.AnonFunc(SHtml.jsonCall( JE.Call("jsFunction"), liftFunction _)))
))
).cmd