Scala Swing GUI作为Lift Webapp

时间:2012-01-09 16:13:26

标签: scala lift

我正在玩一个用Scala编写的ConnectFour游戏。我想使用游戏中的逻辑(模型和控制器)制作一个Lift Webapp。

我的问题是,我应该如何开始?我有纯HTML模板,但我如何使用游戏中的逻辑,例如创建这样的板?

var board = new Board()
  for(y <- 0 to 5; x <- 0 to 6) contents += new CoinComp(x, y)

谢谢!

祝你好运, 约翰

1 个答案:

答案 0 :(得分:0)

首先,您需要知道如何从Board类生成HTML。 有两种选择:

    来自服务器的
  1. ,scala.XML

  2. 来自客户端,javascript

  3. 然后,创建一个可以从客户端调用的ajax服务器端函数:

    def render = {
      import JsCmds._
      var board = initBoard()
    
      def moveAction(s: String): JsCmd = {
        val moveXY = parseXY(s) // s should be like "{x: 1, y: 2}"
        board = move(board, moveXY) // your logic here
        val newBoardToSend = boardToCmd(board) // generate board HTML or json here
        Call("renderBoard", newBoardToSend) // call the client-side render function  
      }
    
      val script = S.fmapFunc(S.contextFuncBuilder(moveAction _)) { funcName => {
        val func = JsRaw("'" + funcName + "='") + Call("encodeURIComponent", LiftRules.jsArtifacts.jsonStringify(JsRaw("{x:x,y:y}")))
        JsCmds.Function(
          "moveIt", // the js function name you will call
          "x" :: "y" :: Nil,
          SHtml.makeAjaxCall(func).cmd
        )
      }} // generate a client ajax function: function moveIt(x, y)
    
      yourRenderXml ++ <tail>{JsCmds.Script(script)}</tail>
    }
    

    最后,你应该有一个客户端函数“renderBoard(b)”来渲染你的页面。当客户点击移动时,调用“moveIt(x,y)”