Play! を変換しようとしています。2.0アプリケーションを Scalatraアプリケーションに。ある程度成功しましたが、3 つの問題が残っており、そのうちの 1 つには独自のチケットがあります。
1) 私はそれを理解しsrc/main/webapp/WEB-INF/views
、src/main/webapp/WEB-INF/layouts
レイアウトを標準のディレクトリ構造に含めます。ただし、これを別の階層で機能させることはできませんでした。たとえば、2 つのサーブレットがあり、それらに異なるビューが必要な場合:
- WEB-INF
- servlet1
- views
- layouts
- servlet2
- views
- layouts
WEB-INF/views
私が提供した例では、またはの直下以外のものを適切に参照することはできませんWEB-INF/layouts
。おそらく、何かをweb.xml
正しく宣言していないからですか?
// works
get("/") {
contentType = "text/html"
templateEngine.layout("/WEB-INF/views/app.jade")
}
// no worky
get("/") {
contentType = "text/html"
templateEngine.layout("/WEB-INF/servlet1/views/app.jade") // where servlet1/layouts/default.jade exists
}
2) テンプレートはどうなっていますか? この変換を機能させるには、アンダースコア テンプレートを Scalatra から利用できるもの (Jade、Mustache など) と組み合わせて使用できる必要があります。すべてのデフォルトの例で Jade が使用されているため、Jade を選択しました。
ここで 2 つのサブ問題に直面しています。
1)このチケットに JavaScript を含めたにもかかわらず、Jade で Underscore テンプレートを使用できないようです。これはうまくいくかもしれないし、うまくいかないかもしれない。これはおそらく....
2) 私のinclude
ステートメントは、実際には部分的なものではなく、タグのように見えるため、最初のサブ問題をテストするのは非常に困難です。
<!-- / Nav -->
<include>nav</include>
<!-- / Action1 -->
<include>action1</include>
<include>action2</include>
<!-- / Wireframe -->
<div id="default-region">
<script id="template-layout" type="text/template">
<div id="region-nav"></div>
<div id="region-content"></div>
</script>
</div>
<!-- / CSS and JavaScripts relative to Backbone app -->
<include>assets</include>
同等のapp.jade
ファイルは次のようになります。
// Nav
include nav
// Action1
include action1
include action2
// Wireframe
div#default-region
script#template-layout(type="text/template")
div#region-nav
div#region-content
// CSS and JavaScripts relative to Backbone app
include assets
どんな助けでも大歓迎です!