3

我正在尝试转换 Play!2.0应用程序转换为 Scalatra应用程序。我取得了一些成功,但还剩下 3 个问题,其中 1 个有自己的

1) 我理解这一点src/main/webapp/WEB-INF/views并将src/main/webapp/WEB-INF/layouts布局包含在标准目录结构中。但是,我无法让它在不同的层次结构中工作,例如,如果我有2 个 servlet并且想要为它们提供不同的视图:

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

在我提供的示例中,我无法充分引用不直接位于WEB-INF/viewsor下的任何内容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)模板是怎么回事?为了使这种转换生效,我需要能够将 Underscore 模板与 Scalatra 提供的任何东西(Jade、Mustache 等)结合使用。我选择 Jade 是因为所有默认示例都使用它。

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

1) 我似乎无法在 Jade 中使用 Underscore 模板,即使我在这张票中包含了 javascripts 。也许这行得通,也许行不通。这大概是因为......

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 回答