我想知道如何在Scala.js中进行动态操作.例如,查看教程中的jQuery示例,我的理解是您在scala中定义以下内容:
object TutorialApp extends JSApp {
def appendPar(msg: String) = {
jQuery("body").append("<p>" + msg + "</p>")
}
def main(): Unit = {
appendPar("Hello World")
}
}
Run Code Online (Sandbox Code Playgroud)
这是在编译时静态生成的所有内容.但我没有看到任何方式可以动态设置消息参数(例如从数据库中读取).
我不知道从数据库中读取它.这超出了这个问题的范围(或者你需要重新解释这个问题).也许是AJAX电话或其他什么?
但是要从<input>标签中读取它,你会做类似的事情:
def main(): Unit = {
val msg = jQuery("#myinput").value()
appendPar(msg)
}
Run Code Online (Sandbox Code Playgroud)
(虽然在这种情况下,它可能在主要方法中没有任何意义,但这不是重点.)
我的意思是,msg只是一个val(所以像varJS 一样,但不可变).您可以根据需要从任何动态信息源中获取它.
编辑:
如果要在呈现页面时访问服务器动态生成的某些数据,可以这样做:
首先,让您的服务器在生成的HTML var中的<script>标记中生成数据作为全局数据.就像是:
<script type="text/javascript">
var mydata = {
msg: "Some text generated dynamically by the server"
}
</script>
Run Code Online (Sandbox Code Playgroud)
确保在调用Scala.js函数之前发出此脚本标记main()!
然后,从Scala.js,您可以使用以下js.Dynamic界面访问这些数据:
import scala.scalajs.js
val mydata = js.Dynamic.global.mydata
val msg = mydata.msg.asInstanceOf[String]
Run Code Online (Sandbox Code Playgroud)
如果您的数据始终是一个相对静态的结构,那么为它们声明一个外观类型可能会很有用:
@JSName("mydata")
object MyData extends js.Object {
val msg: String = ???
}
Run Code Online (Sandbox Code Playgroud)
然后您无需借助DynamicAPI 即可访问它:
val msg = MyData.msg
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2398 次 |
| 最近记录: |