gpt4 book ai didi

scala - Scala.js 中对 JavaScript 的动态调用

转载 作者:行者123 更新时间:2023-12-04 17:34:24 28 4
gpt4 key购买 nike

我想知道如何在 Scala.js 中进行动态操作。比如看教程中的jQuery例子,我的理解是你在scala中定义如下:

object TutorialApp extends JSApp {
def appendPar(msg: String) = {
jQuery("body").append("<p>" + msg + "</p>")
}
def main(): Unit = {
appendPar("Hello World")
}
}

这是在编译时静态生成的所有内容。但是我没有看到任何可以动态设置消息参数的方法(例如,从数据库中读取它)。

最佳答案

我不知道从数据库中读取它。这超出了这个问题的范围(或者你需要重新表述这个问题)。也许是 AJAX 调用之类的?

但是要从例如 <input> 中读取它。标签,你会做这样的事情:

def main(): Unit = {
val msg = jQuery("#myinput").value()
appendPar(msg)
}

(虽然在这种情况下,它在 main 方法中可能没有任何意义,但这不是重点。)

我的意思是, msg只是一个 val (就像 JS 中的 var 但不可变)。您可以根据需要从任何动态信息源中获取它。

编辑:

如果你想在渲染页面时访问服务器动态生成的一些数据,你可以这样做:

首先,让您的服务器将数据生成为全局 var<script>生成的 HTML 中的标记。就像是:

<script type="text/javascript">
var mydata = {
msg: "Some text generated dynamically by the server"
}
</script>

确保在调用 main() 之前发出此脚本标记。 Scala.js 的功能!

然后,从 Scala.js,您可以使用 js.Dynamic 访问这些数据。界面:
import scala.scalajs.js

val mydata = js.Dynamic.global.mydata
val msg = mydata.msg.asInstanceOf[String]

如果您的数据始终具有相对静态的结构,则声明自己可能很有用 a facade type对他们来说:
@JSName("mydata")
object MyData extends js.Object {
val msg: String = ???
}

然后您可以访问它而无需诉诸 Dynamic接口(interface):
val msg = MyData.msg

关于scala - Scala.js 中对 JavaScript 的动态调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28069561/

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