【问题标题】:Scala Swing GUI as Lift WebappScala Swing GUI 作为 Lift Webapp
【发布时间】:2012-01-09 16:13:25
【问题描述】:

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

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

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

谢谢!

最好的问候, 约翰

【问题讨论】:

    标签: scala lift


    【解决方案1】:

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

    1. 来自服务器,scala.XML

    2. 来自客户端,javascript

    然后,创建一个可以从客户端调用的 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)”

    【讨论】:

    • 嘿iron9light,非常感谢!我可以联系你以获得更多帮助吗?电梯现在让我很困惑。我的电子邮件是:johanneshipp@gmail.com
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-19
    • 2013-04-04
    • 1970-01-01
    • 2011-02-04
    • 2016-09-01
    • 2011-05-22
    • 2011-11-05
    相关资源
    最近更新 更多