2012-01-09 5 views
1

저는 스칼라로 작성된 ConnectFour 게임을 가지고 놀고 있습니다. 게임 (모델 및 컨트롤러)의 로직을 사용하여 Lift Webapp를 만들고 싶습니다.스칼라 스윙 GUI를 리프트 웹 앱으로 사용

내 문제는 어떻게 시작해야합니까? 나는 순수한 HTML 템플릿을 가지고있다. 그러나 게임에서 어떻게 로직을 사용할 수 있는가?

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

고마워요!

안부, 존

답변

0

먼저, 당신은 당신의 보드 클래스에서 HTML을 생성하는 방법을 알아야합니다. 서버에서

  1. , scala.XML 클라이언트에서

  2. ,

그런 다음 클라이언트에서 호출 할 수있는 아약스 서버 측 함수를 만드는 자바 스크립트 : 두 가지 선택이 있습니다 :

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> 
} 

마지막으로 "re nderBoard (b) "를 사용하여 페이지에 게시 할 수 있습니다. 클라이언트가 클릭하여 움직이면 "moveIt (x, y)"를 호출하십시오

+0

안녕하세요 iron9light, 정말 고마워요! 좀 더 도움을 요청할 수 있습니까? 승강기는 나에게 매우 혼란 스럽다. 내 이메일 : [email protected] – user1137701

+0

여기를 클릭하거나 [포럼] (https://groups.google.com/forum/#!forum/liftweb) – iron9light

관련 문제