ポクポク

ポクッとしてツナッ

Scalatraでデフォルトのレイアウトを使わない

ScalatraScalaでのSinatra-likeな軽量ウェブアプリケーションフレームワークです。

Siantraには、layoutっていうテンプレートがあったら毎回使ってくれる機能がある。
大抵body以外を書いておいて、読み込むjsとかcssとか毎回書かなくていい感じ、という機能。
だけどiframeとして読み込みたい時とか2回ロードされて困る時とかある、必要に応じてオフにしたい。

Sinatraではこんな感じでできる。

get '/' do
  haml :page, :layout => false
end


Scalatraだと以下のようにやる。

// テンプレートに渡すMapのlayoutを空にする
get("/hoge") {
  contentType = "text/html"
  templateEngine.layout("/views/hoge.scaml", Map("layout" -> ""))
}

// Mapを渡す代わりにtemplateAttributesを使う(2.1.0-SNAPSHOTから)
before("/no-layout/*") {
  // beforeで/no-layout以下へのアクセスはlayout使わないとかできる
  templateAttributes("layout") = ""
}

テンプレートの中でレイアウト無効化する方法もある

- attributes("layout") = ""
%html
  ...

ユーザーグループにカスみたいな英語で投げて教えてもらいました。

前もScalatraのウェブアプリケーションを実行可能jarにしたい、いまはこんな風に無理クソやってますって英語で書いたら、マシな方法教えてくれてそれをヒントにもうちょい良い方法を書いて投げたらドキュメントに載った。オープンソースしてる感あって良かった。