如何在Scala.Js中创建"选项对象"?

Bar*_*son 10 scala.js

在惯用JavaScript中,让函数接受"选项对象"作为最后一个参数是很常见的.这是您通常放置所有选项/很少使用的参数的地方,例如

jQuery.ajax({
   url: "http://www.example.com/foo",
   success: function() {
      ..
   }
})
Run Code Online (Sandbox Code Playgroud)

Scala.JS的当前文档使用Scala特征来推荐表示选项对象,但是当您必须创建选项时会导致问题,因为您无法将匿名类传递给JavaScript代码.

如何从Scala代码创建这样的选项对象?

gzm*_*zm0 12

我们建议如下(如果您选择创建facade-types):

trait AjaxOptions extends js.Object {
  val url: String = js.native
  val success: js.Function0[Unit] = js.native
}

object AjaxOptions {
  def apply(url: String, success: js.Function0[Unit]): AjaxOptions = {
    js.Dynamic.literal(url = url, success = success).asInstanceOf[AjaxOptions]
  }
}
Run Code Online (Sandbox Code Playgroud)

优点是类型不安全的转换包含在一个位置.此外,如果你决定添加/删除字段AjaxOptions,你(希望)会想到也适应同伴的apply方法.因此,typer将通知您必须更改调用的位置(而不是仅将新字段设置为undefined).

有关更多内容,请参阅为API包装器实例化js.Object的建议方法.