Я сделал то же самое, используя решение из этой темы:
http://groups.google.com/group/express-js/browse_thread/thread/8c2006dc7bab37b1/f9a273c836e0a2ac
Вы можете объявить переменную "scripts" в параметрах просмотра:
app.js:
app.set('view options', { locals: { scripts: ['jquery.js'] } }); // You can declare the scripts that you will need to render in EVERY page
Чем у вас может быть помощник, который выводит теги скрипта в начало макета
renderScriptTags () Код помощника:
app.helpers({ renderScriptTags: function(scripts) {
return scripts.map(function(script) {
return '<script src="scripts/' + script + '"></script>';
}).join('\n ');
В шаблоне макета в разделе head у вас будет:
- renderScriptTags(scripts)
Теперь, чтобы добавить скрипт в тег head, вам просто нужно вставить скрипт в переменную «scripts» в вашем шаблоне содержимого Jade (шаблон тела):
- scripts.push('myscript.js');
Таким образом, страница отобразит jquery.js и myscript.js в верхнюю часть страницы
UPDATE
Кажется, что новейшая экспресс-версия обрабатывает местных жителей по-другому, для правильной работы вы можете сделать это (хотя я не уверен, что это оптимальное решение, мне нужно немного покопаться в этом)
Вы можете использовать renderScriptTags () помощника предыдущего метода в шаблоне макета, как и раньше.
Но не устанавливайте переменные scripts в локальные переменные, вместо этого создайте динамический помощник, который сделает переменную scripts доступной в наших шаблонах:
app.dynamicHelpers({
scripts: function(req, res){
return ['jquery.js']; //this will be available in all views
}
});
А затем, чтобы добавить конкретный скрипт из шаблона вашего тела (точно так же, как и раньше):
- scripts.push('myscript.js');
Теперь для этого конкретного вида вы должны правильно отобразить jquery.js и myscript.js