如何使用Scala.js创建javascript函数?

如何使用Scala.js创建javascript函数?,javascript,scala,d3.js,scala.js,Javascript,Scala,D3.js,Scala.js,我使用以下方法创建了一个ScalaJS项目: 阅读上的文档,似乎没有描述创建和调用JavaScript函数 如何创建JavaScript函数并调用它 我将手动将d3添加到index.html的head元素中: <head> <script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script> </head> 在callFunction中,如果输入了svgContaine

我使用以下方法创建了一个ScalaJS项目:

阅读上的文档,似乎没有描述创建和调用JavaScript函数

如何创建JavaScript函数并调用它

我将手动将d3添加到index.html的head元素中:

<head>
    <script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>
</head>
callFunction
中,如果输入了svgContainer,当使用
fastOptJS
构建时,
callFunction
是否会被创建为JavaScript函数


jQuery(dom.document)中。准备好了吗{
,这是创建
svgContainer
testFunction
的正确方法吗?

在Scala.js中,
Scala.FunctionN
s可以隐式转换为
js.FunctionN
s并返回,因此基本上不需要做任何事情:只需将lambda传递给JavaScript调用“在Scala.js中设置UI”。对于您的代码,它如下所示:

jQuery(dom.document).ready { () =>
  val svgContainer = ...
}
有关这方面的更多信息,请参阅

更新:

以下是您的整个JavaScript代码片段的翻译:

import scala.scalajs.js
import org.scalajs.dom           // see https://github.com/scala-js/scala-js-dom
import org.scalajs.jquery.jQuery // see https://github.com/scala-js/scala-js-jquery

object ScalaJSExample extends js.JSApp {
  val d3 = js.Dynamic.global.d3 // assuming you don't have static types for d3, here

  def main(): Unit = {
    jQuery(dom.document).ready { () =>
      val svgContainer =
        d3.select("body").append("svg")
          .attr("width", 1200)
          .attr("height", 1200)
          .attr("text-align", "center")
      testFunction(svgContainer)
    }
  }

  def testFunction(svgContainer: js.Dynamic): Unit = {
    dom.alert(svgContainer.toString())
  }
}
如你所见:

  • 对于具有Scala.js静态类型的库(例如DOM和jQuery),最好使用这些静态类型。以下是以静态类型的方式使用
    ready()
    DOM.document
    DOM.alert
  • 当您没有静态类型时,您可以使用
    js.Dynamic
    以动态类型化的方式操作JavaScript值,使用正常语法(而不是字符串)
  • 您可以使用
    def
    定义函数。它们是否编译为JavaScript函数对您来说并不重要:只需编写Scala代码而不考虑它,编译器就会完成它的工作

  • 在Scala.js中,
    Scala.function
    s可以隐式转换为
    js.function
    s并返回,因此基本上不需要做任何操作:只需将lambda传递给JavaScript调用。在Scala.js中的Setup UI下面有一个示例。对于代码,它如下所示:

    jQuery(dom.document).ready { () =>
      val svgContainer = ...
    }
    
    有关这方面的更多信息,请参阅

    更新:

    以下是您的整个JavaScript代码片段的翻译:

    import scala.scalajs.js
    import org.scalajs.dom           // see https://github.com/scala-js/scala-js-dom
    import org.scalajs.jquery.jQuery // see https://github.com/scala-js/scala-js-jquery
    
    object ScalaJSExample extends js.JSApp {
      val d3 = js.Dynamic.global.d3 // assuming you don't have static types for d3, here
    
      def main(): Unit = {
        jQuery(dom.document).ready { () =>
          val svgContainer =
            d3.select("body").append("svg")
              .attr("width", 1200)
              .attr("height", 1200)
              .attr("text-align", "center")
          testFunction(svgContainer)
        }
      }
    
      def testFunction(svgContainer: js.Dynamic): Unit = {
        dom.alert(svgContainer.toString())
      }
    }
    
    如你所见:

  • 对于具有Scala.js静态类型的库(例如DOM和jQuery),最好使用这些静态类型。以下是以静态类型的方式使用
    ready()
    DOM.document
    DOM.alert
  • 当您没有静态类型时,您可以使用
    js.Dynamic
    以动态类型化的方式操作JavaScript值,使用正常语法(而不是字符串)
  • 您可以使用
    def
    定义函数。它们是否编译为JavaScript函数对您来说并不重要:只需编写Scala代码而不考虑它,编译器就会完成它的工作

  • 请参阅问题更新,我不确定如何将svgContainer参数传递给函数并调用同一函数?请参阅问题更新,我不确定如何将svgContainer参数传递给函数并调用同一函数?