1

在 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不是 a JValue,这是绝对正确的:它不是。但在 JavaScript 中,function () {}调用是文字对象字段的合法值。我怎么能让Lift知道呢?

这里的长期目标是函数体最终成为:

SHtml.jsonCall( JE.Call("jsFunction"), liftFunction _ )
4

2 回答 2

1

这是我不久前给想要将 Lift 与 jquery 自动完成集成的人的答案,它使用类似的回调方法:Lift - Autocomplete with Ajax Submission

于 2014-02-18T16:36:54.687 回答
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
于 2014-02-19T05:05:49.240 回答