2014-02-17 41 views
1

在JavaScript中,特別是在jQuery中,有一個使用文字參數進行函數調用並且該參數的字段是內聯匿名函數的情況很常見。像這樣:在Lift中,使用內聯函數創建一個JObject

$(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 _) 

回答

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 
相關問題