Правильное использование js.ThisFunction0

Я пытаюсь заставить работать scala.js вместе с библиотекой w2ui jQuery. Однако, когда я определяю свое действие сброса в форме, поведение не такое, как я ожидал.

Для того, чтобы обработать мое действие сброса. Я определяю что-то вроде следующего в моем коде scalajs:

...
 actions = js.Dynamic.literal(
  reset = { form: W2Form =>
   form.clear()
  }: js.Function1[W2Form, Any],
...

Однако это вызывает ошибку, когда я нажимаю кнопку сброса:

TypeError: this.refresh не является функцией
this.refresh ();
^

Изучив сгенерированный код JavaScript, я могу понять, почему возникает эта ошибка:

"actions": {
  "reset": (function(f) {
    return (function() {
      return f.apply__O__O(this)
    })
  })(new $c_sjsr_AnonFunction1().init___sjs_js_Function1((function(form$2) {
    return (0, form$2["clear"])()
  }))),

Это можно исправить, изменив последнюю строку вручную на:

  return (form$2["clear"])()

Может кто-нибудь сказать мне, что я делаю не так?

1 ответ

Решение

Ваше использование js.ThisFunction0 отлично в порядке. Ваша проблема исходит от вашего звонка clear, Я подозреваю, что вы определили clear как это в W2Form:

@js.native
class W2Form(...) extends js.Object {
  val clear: js.Function0[Unit] = js.native // or var or def
  ...
}

Это вызвало бы form.clear() сначала выбрать поле clear от formзатем вызывая извлеченную функцию независимо от form, Если ты хочешь clear называться методом form, вам нужно объявить это как метод:

def clear(): Unit = js.native
Другие вопросы по тегам