Скаляты JsDom против текста
Каковы различия и цели scalatags.Text.all._
а также scalatags.JsDom.all._
пакеты?
В официальном уроке скалатагов вы можете прочитать:
// 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>
1 ответ
Различия описаны в документации скалатагов в частях DOMBackend и Internals.
В кратких при использовании scalatags.Text
пакет, структура оказывает непосредственно String
но при использовании scalatags.JsDOM
пакет, структура отображает подтип org.scalajs.dom.raw.Element
(который находится вне скалатагов - это часть библиотеки scalajs). Когда имеешь дело с Element
s возможно дальнейшее манипулирование структурой dom с очень низким уровнем абстракции.
Здесь, при использовании 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