enchant.js + play2.0 + CoffeeScript

ちょっと気になって、enchant.jsを調べ始めた。

ExtJSもそうだけど、結局クライアント側のソースがJavaScriptだけ記述すれば良いのであれば、
JavaScriptを呼び出すだけのHTMLって余計というかいらないんだよね。

ということで、JavaScriptだけ指定して、実行できる環境をPlay2.0で作ってみた。

要は、こんな感じで指定すると、どこか知らないHTMLからXXX.jsを呼び出してくれるという感じ。
http://localhost/enchant/XXX.js

・conf/routes

GET    /enchant/:script        controllers.Application.enchant(script:String)

・app/controllers/Application.scala

package controllers

import play.api._
import play.api.mvc._

object Application extends Controller {

def enchant(script:String) = Action {
Ok(views.html.enchantmain(script))
}
}

・app/views/enchantmain.scala.html

@(scriptpath: String)
<!DOCTYPE html>
<html>
<head>
<title>@scriptpath</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,user-scalable=no">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-var-style" content="black-translucent">
<style type="text/css">
body {
margin: 0;
}
</style>

<link rel="shortcut icon" type="image/png" href="@routes.Assets.at("images/favicon.png")">
<script src="@routes.Assets.at("javascripts/enchant/enchant.js")" type="text/javascript"></script>
<script src="@routes.Assets.at("javascripts/enchant/plugins/ui.enchant.js")" type="text/javascript"></script>
<script src="@routes.Assets.at("javascripts/enchant/enchant.js")" type="text/javascript"></script>
<script src="@routes.Assets.at("javascripts/" + scriptpath)" type="text/javascript"></script>
</head>
<body>
</body>
</html>

・app/assets/javascripts/test001_bear.coffee

enchant()

window.onload =->
game = new Game(320,320)

imagePath = "/assets/javascripts/enchant/images/chara1.gif"
game.preload(imagePath)

game.onload = ->
bear = new Sprite(32,32)
bear.image = game.assets[imagePath]
bear.frame = 4

bear.addEventListener Event.ENTER_FRAME , ->
this.x += 3
if this.x > 320
this.x = -32

game.rootScene.addChild bear

game.start()

んで、http://localhost:9000/enchant/test001_bear.js にアクセス

いろいろ気づいたところ
・apps/assets/javascriptsにはJavaScript,CoffeeScriptの両ファイルは混在できる
JavaScript,CoffeeScript内では@routes.asset.Atは使えない(Scalaテンプレートじゃないのであたりまえか)
CoffeeScript作ればすぐに動かせるのでかなり楽チン