2016-09-25 5 views
1

Was sind Unterschiede und Zwecke von scalatags.Text.all._ und scalatags.JsDom.all._ Pakete?scalags JsDom vs Text

In official scalatags tutorial kann man lesen:

// 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> 

Antwort

2

Unterschiede werden in scalatags Dokumentation beschrieben in Teilen DOMBackend und Internals.

In shortucts wenn scalatags.Text Paket verwendet wird, macht die Struktur direkt an String aber wenn scalatags.JsDOM Paket verwendet wird, macht die Struktur des Subtyps org.scalajs.dom.raw.Element (die außerhalb scalatags ist - es ist Teil der scalajs Bibliothek). Bei Element s ist es möglich manipulate dom structure very low level of abstraction weiter zu bearbeiten.

Wenn hier scalatags.Text. Verwendung h1 macht zu String:

import scalatags.Text.all._ 
    val x: String = h1("some header").render 
    //x is a String 

Aber hier, wenn scalatags.JsDom verwendet wird, macht 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