Подтвердить что ты не робот

Двигатель Razor для ExpressJS

Я работал с 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% о некоторых аспектах выше (а именно, переносятся переменные, переносящие в макет из шаблона..., попытаемся подтвердить позже.

4b9b3361

Ответ 1

Vash - это самый полный и обновленный клон бритвы, который я нашел еще. Определенно проверьте, что один из них.

Ответ 2

Я просто наткнулся на механизм шаблона Bliss. Он использует почти точный синтаксис бритвы. Возможно, вам придется выполнить минимальную работу, чтобы аккуратно ее интегрировать в экспресс.

Сочетание с выражением

Ответ 3

Я просто собирался взглянуть на Bliss, когда я столкнулся с JSHTML, который, похоже, поддерживает Express JS.

https://github.com/elmerbulthuis/jshtml

Ответ 4

Я не сталкивался с механизмом просмотра node, который реплицирует синтаксис Razor, что довольно приятно, но довольно уникально для .NET. Возможно, это хороший проект для запуска на github.

Для частичной поддержки проверьте частичные части в EJS или импортируйте в Jade. Это не полный аналог того, что вы ищете, но они будут выполнять эту работу. Мое личное мнение, выкопайте Джейд; тем больше вы его используете, тем больше вам понравится.