Визуализация нефритового шаблона с макетом (без экспресса) - PullRequest
6 голосов
/ 22 февраля 2012

При рендеринге jade шаблонов в экспрессе вы можете сконфигурировать ваше приложение с 'view options', { layout: true }, и визуализированные шаблоны будут автоматически подключены к локальному body шаблона макета.

Я пытаюсь добиться эквивалентного поведения при рендеринге файлов из node.js, но без экспресс-фреймворка (я просто создаю статические файлы как часть большого конвейера).

Возможны два варианта:

  • Загрузка основного шаблона и макета, преобразование в функции, сначала визуализация шаблона, а затем передача результатов в функцию макета
  • Используйте стандартное наследование шаблонов и блочную структуру, но тогда я явно использую именованные блоки

Это единственные варианты (которые, честно говоря, все еще потрясающие), или я упускаю какой-то трюк?


Редактировать

Вот примерный вариант первого варианта на случай, если кому-то будет интересно:

// Load jade
var jade = require('jade');

// Load actual template text
var layout = fs.readFileSync('layout-path', 'utf8')
    tpl = fs.readFileSync('tpl-path', 'utf8');

// Compile template rendering function
layout = jade.compile(layout, { pretty: true, filename: 'layout-path' });
tpl = jade.compile(tpl, { pretty: true, filename: 'tpl-path' });

// Render jade template, passing in the info
var output = layout({ body: tpl({ local1: some_var, local2: some_var }) }

// Write rendered content to file
fs.writeFileSync('output.html', output);

1 Ответ

3 голосов
/ 23 февраля 2012

Я считаю, что ответ «нет», вы не пропустите ни одного трюка. Два описанных вами варианта кажутся мне двумя наиболее простыми способами использования jade для создания вашего файла. Конечно, есть и множество нефритовых подходов. Например, вы можете объединить содержимое с помощью подхода пластин , старого доброго String.replace или разбить ваш макет на отдельные файлы фрагментов заголовка и нижнего колонтитула и просто объединить их в порядке головы, тела и стопы.

...