2012-02-22 3 views
6

При визуализации шаблонов 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

Я думаю, что Express 3.0 сбрасывает макет (как минимум, по умолчанию) в пользу наследования шаблона с именованными блоками, поэтому, возможно, это поможет в вашем решении: http://groups.google.com/group/express -js/browse_thread/thread/2ec558510be6d0a4 (и см. также заглушку, сгенерированную express.js при инициализации нового проекта: https://github.com/visionmedia/express/blob/master/bin/express). – mna

+0

@PuerkitoBio Спасибо за информацию; Стоит отметить, но мой реальный вопрос - это единственные способы сделать это *? Люди, которые объединяют эти вещи, часто встраивают короткое замыкание в обычные случаи использования - я просто не всегда достаточно умен, чтобы их найти! –

+0

@ AJ. спасибо за фрагмент. –

ответ

3

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

+0

Спасибо за это - и я ценю ссылку на инфраструктуру Flatiron и напоминание о том, что это не новые проблемы. Иногда легко потерять себя в облаках :) –

Смежные вопросы