3

Play! を変換しようとしています。2.0アプリケーションを Scalatraアプリケーションに。ある程度成功しましたが、3 つの問題が残っており、そのうちの 1 つには独自のチケットがあります。

1) 私はそれを理解しsrc/main/webapp/WEB-INF/viewssrc/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

どんな助けでも大歓迎です!

4

1 に答える 1

2

ビューを別の方法で構造化するか、ビューに別のファイルシステム構成を提供する必要があります。getRenderContextをオーバーライドすることで構成できます。

templateEngine.layout を呼び出す必要はありませんが、代わりにヘルパー メソッドを使用してください。となるレイアウトの翡翠の場合jade("my_view", "layout" -> "/WEB-INF/layouts/authenticated.jade")

それらのタグなどを含めることについては、おそらくこれを意味しますか?

于 2012-11-28T18:54:54.230 に答える