我一直在玩弄 NodeJS、ExpressJS 等,并且真的希望能够拥有一个更接近 ASP.Net MVC 的 Razor Node 引擎 (jshtml) 的模板引擎。我很好奇是否有人熟悉这种野兽,或者更接近它的东西。
我想要的主要功能是针对主/父布局/模板的基于区域/部分的插入,这似乎不是我目前看到的 Node 模板引擎中的功能。
-- 编辑:2012-02-09--
我本质上希望能够做到以下几点......
_layout.jshtml
<!DOCTYPE html>
<html>
<head>
<!-- meta tags, etc -->
<!-- title set in page -->
<title>@ViewBag.Title</title>
<!-- site-wide styles -->
@RenderSection("Styles", false)
</head>
<body class="@ViewBag.PageClass">
<!-- site-wide header -->
<div id="side_content">
@RenderSection("Side", false)
</div>
<div id="main_content">
@RenderBody()
</div>
<!-- site-wide footer -->
<!-- site-wide scripts -->
@RenderSection("Scripts", false)
</body>
</html>
mypage.jshtml
@{
ViewBag.Title = "My Page";
ViewBag.PageClass = "page-x";
}
@section Styles {
<link ... />
}
@section Scripts {
<script type="text/javascript">
var pagesettings = @Html.Raw(Model.SomeJsonContentFromController);
</script>
}
@section Side {
side content here
}
main content here
将某些标准从 View 传递到包括多个部分的布局中。我还没有看到如何在 Jade 或 EJS 中执行此操作的示例,如果可能的话,我将不胜感激。
-- 编辑:2012-02-13 --
看起来像 ExpressJS 3 + Jade 现在有“扩展”和“ block ”关键字来精确定义我正在寻找的内容。以 from here 为例.感谢 @Don为他的回答和评论。
// my-template.jade
extends my-layout
// only guessing this var will be passed to the layout (testing later)
- var pageTitle = "My Template";
- var pageClass = "my-template";
block styles
style(type="text/css")
block scripts
script(src="myscript.js")
block side
div Side Content Here
block main
div Main Content Here
//my-layout.jade
doctype 5
html
head
title #{pageTitle} - My Site
body(class=pageClass)
#side
block side
#main
block main
block scripts
我对上述某些方面不是 100% 确定(即从模板传递到布局的变量...稍后会尝试确认。
最佳答案
Vash是我发现的功能最完整和最新的 Razor 克隆。一定要看看那个。
关于node.js - ExpressJS 的 Razor View 引擎,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9197440/