如何使用 Binding.scala 声明嵌入的 css

How do I declare embedded css with Binding.scala

我试图用 Binding.scala

声明一些嵌入的 css
import com.thoughtworks.binding._, Binding._
import org.scalajs.dom._

@dom def css = <style>
  body {
    background-color: lightblue;
  }
</style>

dom.render(document.head, css)

但是,我收到错误消息:

ScalaFiddle.scala:6: error: not found: type lightblue
      background-color: lightblue;
                        ^
ScalaFiddle.scala:6: error: not found: value background
      background-color: lightblue;
      ^
ScalaFiddle.scala:6: error: not found: value color
      background-color: lightblue;
                 ^

我该如何解决?

您看到错误消息是因为 { 是 Scala 的 XML 文字中的特殊字符。

style 元素中使用 CDATA 部分。

@dom def css = <style>
  <![CDATA[
    body {
      background-color: lightblue;
    }
  ]]>
</style>

{CDATA 部分不再有特殊含义。


请注意,此 CDATA 方法仅在 coalescing 标志打开时有效。 如果您不小心关闭了标志,请参阅 https://github.com/ThoughtWorksInc/Binding.scala/issues/30 and https://github.com/ThoughtWorksInc/Binding.scala/issues/58

使用杨波的回答:

@dom def css = <style>
  <![CDATA[
    body {
      background-color: lightblue;
    }
  ]]>
</style>

给我一个例外:

ScalaFiddle.scala:22: error: overloaded method value domBindingSeq with alternatives:
  ( text: String)binding.this.Binding.Constants[raw.this.Text] 
...

https://scalafiddle.io/sf/ATMVpjV/0

这解决了它:

  @dom def css = <style>
  {"""
    body {
      background-color: lightblue;
    }
    """
  }
</style>

https://scalafiddle.io/sf/ATMVpjV/1