0

我试图让 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"])()

有人可以告诉我我做错了什么吗?

4

1 回答 1

2

您的使用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()首先从 中选择字段,然后clearform中独立调用检索到的函数form。如果要clear作为 的方法被调用,form则需要将其声明为方法:

def clear(): Unit = js.native
于 2015-10-30T05:55:50.787 回答