我正在尝试转换游戏! 2.0 application加入Scalatra application。我已经取得了一些成功,但仍有3个问题,其中1个问题有ticket。
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/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)模板有什么用?为了使这个转换工作,我需要能够使用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
任何帮助将不胜感激!
答案 0 :(得分:2)
您可以采用不同的方式构建视图,或者必须为视图提供不同的文件系统配置。您可以按overriding getRenderContext配置它。
您不需要调用templateEngine.layout,而是使用我们的帮助方法。
对于布局变为jade("my_view", "layout" -> "/WEB-INF/layouts/authenticated.jade")
至于包含这些标签等,或许你的意思是this?