正确使用 js.ThisFunction0

Correct usage of js.ThisFunction0

我正在尝试让 scala.js 与 w2ui jQuery 库一起工作。但是,当我在表单中定义我的重置操作时,行为并不像我预期的那样。

为了处理我的重置动作。我在我的 scalajs 代码中定义了如下内容:

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

然而,当我点击重置按钮时,这会导致错误:

TypeError: this.refresh is not a function
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) {
    return (0, form["clear"])()
  }))),

这可以通过手动更改最后一行来纠正:

  return (form["clear"])()

谁能告诉我我做错了什么?

您对 js.ThisFunction0 的使用完全没问题。您的问题来自您拨打 clear 的电话。我怀疑你在 W2Form:

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

这将导致 form.clear() 首先 select 来自 form 的字段 clear,然后独立于 form 调用检索到的函数。如果想让clear作为form方法被调用,需要声明为方法:

def clear(): Unit = js.native