gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 08:01:23 25 4
gpt4 key购买 nike

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

http://www.scala-js.org/doc/tutorial.html

http://www.scala-js.org/doc/faq.html 阅读文档,好像没有描述创建和调用JavaScript函数?

如何创建 JavaScript 函数并调用它?

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

<head>
<script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>
</head>

但是如何使用 ScalaJS 创建以下代码?

$(document).ready(function () {

var svgContainer = d3.select("body").append("svg")
.attr("width", 1200)
.attr("height", 1200)
.attr("text-align", "center");

testFunction(svgContainer);
});

<script>
function testFunction(svgContainer) {
alert(svgContainer)
}
</script>

整个index.html:

<!DOCTYPE html>
<html>
<head>
<title>Example Scala.js application</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body>

<h1>Example Scala.js application - full-optimized version</h1>

<p>After having compiled and full-optimized properly the code for the application
(using `sbt fullOptJS`), you should see "It works" herebelow.
See README.md for detailed explanations.</p>

<div id="playground">
</div>

<script type="text/javascript" src="./target/scala-2.10/my-project-fastopt.js"></script>
<script type="text/javascript" src="./target/scala-2.10/my-project-launcher.js"></script>

</body>
</html>

更新:

object ScalaJSExample extends js.JSApp {
def main(): Unit = {

jQuery(dom.document).ready { () => {

val svgContainer = "d3.select(\"body\").append(\"svg\").attr(\"width\", 1200).attr(\"height\", 1200).attr(\"text-align\", \"center\")";
val function = "callFunction(svgContainer)";
}
}
}

def callFunction(svgContainer): Unit = {

}
}

callFunction 中应该键入 svgContainer,当使用 fastOptJS 构建时,callFunction 会被创建为 JavaScript 函数吗?

jQuery(dom.document).ready { 中,这是创建 svgContainertestFunction 的正确方法吗?

最佳答案

在 Scala.js 中,scala.FunctionN 可以隐式转换为 js.FunctionN 并返回,所以您基本上不需要做任何事情:只需将 lambda 传递给 JavaScript 调用。有一个例子 in Step 5 of the the tutorial ,在“Scala.js 中的设置 UI”下。对于您的代码,它看起来像这样:

jQuery(dom.document).ready { () =>
val svgContainer = ...
}

您可以在 calling JavaScript guide 中找到更多相关信息.

更新:

这是对整个 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())
}
}

如你所见:

  1. 对于具有 Scala.js 静态类型的库(例如 DOM 和 jQuery),最好使用这些静态类型。这里以静态类型的方式使用 ready()dom.documentdom.alert
  2. 当你没有静态类型时,你可以使用 js.Dynamic 以动态类型的方式操作 JavaScript 值,使用普通语法(不是字符串)
  3. 您使用def 定义函数。它们是否被编译为 JavaScript 函数对您来说应该无关紧要:只需编写您的 Scala 代码而不用考虑它,编译器就会完成它的工作。

关于javascript - 如何使用 Scala.js 创建一个 javascript 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27342821/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com