Я работал с 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
Что передают определенные критерии из представления в макет, включая несколько разделов. Я не видел примера, как это сделать в Jade или EJS, если это возможно, я был бы признателен за понимание.
- изменить: 2012-02-13 -
Похоже, что ExpressJS 3 + Jade теперь "расширяет" и "блокирует" ключевые слова для определения того, что я искал. Пример отсюда. Спасибо @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% о некоторых аспектах выше (а именно, переносятся переменные, переносящие в макет из шаблона..., попытаемся подтвердить позже.