你知道Scala到Javascript DSL /编译器吗?

时间:2011-04-04 07:01:27

标签: scala lift

你知道Scala到Javascript DSL /编译器吗? 我想用Scala编写我的Javascript代码,所以我不必编写这么多的JS代码。 谢谢你的帮助!

5 个答案:

答案 0 :(得分:7)

还有Scala-GWT项目。

答案 1 :(得分:6)

你可以尝试一下Lift的JsCmds和JqJsCmds(jquery)来看看它能支持你的需求。它在Lift-applications中非常有用(还没有回到原始的javascript)。

答案 2 :(得分:2)

那么,您可以将scala类反编译为java源代码,然后使用GWT编译反编译的java源代码..好吧,但是你应该知道GWT只支持JDK的一个子集。

答案 3 :(得分:2)

Reactive-web有一个非常完整,易于阅读的DSL,用于在Scala中编写Javascript。实际上DSL有两个部分:表达式和语句。

语句使用构建器DSL(在DSL中应用对象将实例放在可以收集的线程本地堆栈上)。如果将其括在Javascript { ... } block中,则javascript将通过Lift webapp发送到浏览器。如果您只是想让它返回DSL对象,请将其括在val (_, theStatements) = JsStatement.inScope{ ... }中。您可以将结果传递给String

,将其呈现为JsStatement.render

以下是测试中的一些代码:

  If(true) {
    window.alert("True")
  }.ElseIf (false){
    window.alert("False")
  } Else {
    If(true) {
    } Else {
    }
  }
  While(true) {
    window.alert("Again!")
  }
  Do {
    window.alert("Hello!")
  } While (false)
  Switch(1)(
    0.$ :> {
      window.alert("No")
    },
    1.$ :> window.alert("Yes")
  )
  object i extends JsVar[JsNumber]
  For(List(i := 1), i < 10, List(i := i + 1)) {}

  Page.withPage(new Page){
    for (j <- List(1.$, 2.$, 3.$)$) {
      If(j > 1) {
        window.alert("Greater"$)
      }
    }
    for (j <- Each(List(1.$, 2.$, 3.$))) {
      If(j > 1) {
        window.alert("Greater")
      }
    }
    Try {
      Throw("message")
    } Catch { c =>
    } Finally {
    }
  }

  object myFunc extends Function({ x: $[JsNumber] =>
    If(x > 10) {
      window alert "Greater"
    } Else {
      window alert "Small"
    }
  })
  myFunc(10)
  Page.withPage(new Page) {
    val myFunc2 = Function({ x: $[JsNumber] => Return(x > 10) })

    val myAjax = Ajax{ x: String => println("Got "+x) }
    myAjax("Hello server!")
  }

表达式

测试中的一些代码(请注意,虽然它目前使用$,但将来应该更改为更易读的内容):

(1.$ + 2 render) should equal (new JsOp(1, 2, "+").render)

{ () =>
  If(true) {
    window alert "Greater"
  } Else {
    window alert "Small"
  }
}.$.render should equal (
  "(function(){if(true) {window.alert(\"Greater\")} else {window.alert(\"Small\")};return })"
)

答案 4 :(得分:1)

JScala - Scala宏将Scala代码转换为JavaScript。