Правильное использование 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