在Lift中,发送标签的ID以及功能结果

时间:2014-03-20 00:11:49

标签: javascript jquery scala lift

我有这段代码并且有效:

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。

1 个答案:

答案 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。这很难弄清楚,但很容易做到。