scalatags.Text.all._
和 scalatags.JsDom.all._
包有何区别和用途?
在 official scalatags tutorial您可以阅读:
// import scalatags.Text.all._
// OR
// import scalatags.JsDom.all._
html(
head(
script(src:="..."),
script(
"alert('Hello World')"
)
),
body(
div(
h1(id:="title", "This is a title"),
p("This is a big paragraph of text")
)
)
)
And turns them into HTML like this:
<html>
<head>
<script src="..."></script>
<script>alert('Hello World')</script>
</head>
<body>
<div>
<h1 id="title">This is a title</h1>
<p>This is a big paragraph of text</p>
</div>
</body>
</html>
最佳答案
scalatags 文档中 DOMBackend 部分描述了差异和 Internals 。
简而言之,当使用scalatags.Text
包时,结构直接渲染为String
,但是当使用scalatags.JsDOM
包时,结构渲染到 org.scalajs.dom.raw.Element
的子类型(位于 scalatags 之外 - 它是 scalajs 库的一部分)。处理 Element
时,可以进一步 manipulate dom structure very low level of abstraction 。
这里,当使用scalatags.Text.
时,h1
渲染为String
:
import scalatags.Text.all._
val x: String = h1("some header").render
//x is a String
但是在这里,当使用 scalatags.JsDom
时,h1
呈现为 org.scalajs.dom.raw.HTMLHeadingElement
:
import scalatags.JsDom.all._
val x: Heading = h1("some header").render
//x is type of Heading, which is defined as:
//type Heading = raw.HTMLHeadingElement
//raw.HTMLHeadingElement is org.scalajs.dom.raw.HTMLHeadingElement
关于html - scalatags JsDom 与 Text,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39684711/