ExpressJS的Razor视图引擎

我一直在用NodeJS,ExpressJS等,并且真的希望能够有一个模板引擎更接近ASP.Net MVC的节点(jshtml)的Razor引擎。 我很好奇,如果有人熟悉这样一个野兽,或更接近它。

我想要的主要function是基于区域/部分插入对主/父布局/模板,这似乎不是模板引擎中的function,我已经看到的节点到目前为止。


– 编辑: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 

这是从视图通过一定的标准,包括多个部分的布局。 我还没有看到如何在Jade或EJS中做到这一点的例子,如果可能的话,我将不胜感激。


– 编辑:2012-02-13 –

它看起来像ExpressJS 3 +翡翠现在有“扩展”和“阻止”的关键字来准确定义我在找什么。 取自这里的例子。 感谢@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%肯定的(即从模板进行布局的variables…将在稍后尝试确认。

Vash是我发现的function最齐全,最新的razor克隆。 肯定检查一下。

我刚碰到了Bliss模板引擎。 它使用几乎精确的剃刀语法。 您可能需要做一些简单的工作,将其整洁地整合到express中。

结合快递

当我碰到似乎支持Express JS的JSHTML时,我只是想看看Bliss。

https://github.com/elmerbulthuis/jshtml

我还没有遇到一个复制Razor语法的节点视图引擎,这对于.Net来说是相当不错的。 可能是在github上开始的一个好项目。

对于部分支持,请查看EJS中的部分内容或在Jade中导入。 这不是一个完全类似于你正在寻找,但他们会做的工作。 我个人认为,深入翡翠; 你越使用它越多,你会喜欢它。