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>
答案 0 :(得分:2)
部分DOMBackend和Internals中的scalatags文档中描述了差异。
在使用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