관리 메뉴

nkdk의 세상

lift PocketChange란 무엇인가? 본문

My Programing/Scala&Lift

lift PocketChange란 무엇인가?

nkdk 2010. 6. 10. 23:19
이번 에는 포켓 체인지에 대해서 해 볼까요?

일단 http://wiki.liftweb.net/index.php?title=Lift_View_First 이 사이트를 봐 보시지요.

<html>
...
<lift:snippet type="show:myForm" form="POST">
<tr><td>Name</td><td><f:name><input type="text"/></f:name></td></tr>
<tr><td>Birthyear</td><td><f:year><select><option>2007</option><option>2006</option></select></f:year></td></tr>
<tr><td>&nbsp;</td><td><input type="submit" value="Add"/></td></tr>
</lift:snippet>
...
</html>
이렇게 뷰 부분에 선언이 되어 있는데 이것도 저희 회사 사장님이 자주 이야기 하시는 것 처럼
감각적으로 보게 되면

class Show {
def myForm(xhtml: Group) = {
var name = ""
def handleYear(year: String) {
... the form's been submitted... do something
}
Helpers.bind("f", xhtml, "name" -> SHtml.text(name, name = _),
"year" -> SHtml.select((1900 to 2007).toList.reverse.map(v => (v.toString, v.toString)),
Empty, handleYear _))
}
}

이렇게 하면 show:myForm 라는 타이프가 scala에 코드와 미묘하게 바인딩이 되는게 보이실 겁니다.


두번째 예제를 보면

<table>
<lift:snippet type="show:users">
<tr><td><f:first_name>David</f:first_name></
td><td><f:last_name>Pollak</f:last_name></td></tr>
</lift:snippet>

</table>

그럼 snippet은?

class Show {
def users(xhtml: Group) = Users.findAll.flatMap(user => bind("f",
xhtml, "first_name" --> user.firstName, "last_name" --> user.nameName))
}


정도가 되겠네요.

자 그럼 다음으로 git으로 공개 되 있는 소스좀 받아 볼까 하는데요.

http://git-scm.com/download 로 가서 다운로드를 시도해 봅시다

잘 되네요.

자 그럼
git clone git://github.com/tjweir/pocketchangeapp.git

이 명령어로 소스를 받아 볼까요. 그럼 일단 기본적인 모양이 나오니 참고하시면 좋겠네요.

이제 부터 이 소스를 중점으로 가지고 설명할 것이니.. 꼭 받으세요. 추가로 저는 맥으로 작업 중입니다.
다른 환경에서의 테스트는 해보지 않았기 때문에.. 잘 될지는 모르지만, 지금 모양으로 봐서는 잘 될거 같네요.

다음 화에서는 전체 시스템에 축이 되는 모델에 정의 방법에 대해서 같이 한번 봅시다.