Scala Swing GUI как веб-приложение Lift - PullRequest
1 голос
/ 09 января 2012

Я играю с игрой ConnectFour, написанной на Scala.Я хочу сделать Lift Webapp, используя логику из игры (модель и контроллер).

Моя проблема в том, как мне начать?У меня есть чистый HTML-шаблон, но как я могу использовать логику из игры, например, создание такой доски?

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

Спасибо!

С наилучшими пожеланиями, Джон

1 Ответ

0 голосов
/ 10 января 2012

Во-первых, вам нужно знать, как генерировать HTML из вашего класса Board.Существует два варианта:

  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)"

...