来自Play!到Scalatra,模板化头痛,目录结构

时间:2012-11-28 18:11:13

标签: javascript scala playframework underscore.js scalatra

我正在尝试转换游戏! 2.0 application加入Scalatra application。我已经取得了一些成功,但仍有3个问题,其中1个问题有ticket

1)我理解src/main/webapp/WEB-INF/viewssrc/main/webapp/WEB-INF/layouts包含标准目录结构中的布局。然而,我无法让它在不同的层次结构中工作。如果我有 2个servlet 并想要不同的视图:

- WEB-INF
 - servlet1
   - views
   - layouts
 - servlet2
   - views
   - layouts

在我提供的示例中,我无法充分引用任何不直接在WEB-INF/viewsWEB-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)模板有什么用?为了使这个转换工作,我需要能够使用Underscore模板以及Scalatra(Jade,Moustache等)提供给我的任何东西。我选择了Jade,因为所有默认示例都使用它。

我真的遇到了两个子问题。

1)我似乎无法使用Jade的Underscore模板,即使我已将javascripts包含在this ticket中。也许这有效,也许它没有。这可能是因为......

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

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

您可以采用不同的方式构建视图,或者必须为视图提供不同的文件系统配置。您可以按overriding getRenderContext配置它。

您不需要调用templateEngine.layout,而是使用我们的帮助方法。 对于布局变为jade("my_view", "layout" -> "/WEB-INF/layouts/authenticated.jade")

的玉石

至于包含这些标签等,或许你的意思是this