В Lift отправьте идентификатор тега вместе с результатом функции

0

У меня есть этот код, и он работает:

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.

Теги:
lift

1 ответ

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. Это было трудно понять, но было легко сделать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню