Глобальная переменная в Marko JS Template и Express
Однажды я установил глобальную переменную в Express, используя
app.use(function(req, res, next){
res.locals.isAuthenticated = true;
next();
});
Как я могу получить эту переменную из любого представления (шаблон *.marko)?
Я знаю, что в Jade у вас должен быть доступ к нему напрямую, как и к любой другой переменной, без необходимости передавать его от дочернего к родительскому шаблону. Что эквивалентно в Marko JS?
Спасибо
1 ответ
С Marko вы обычно хотите обойти механизм представления Express и визуализировать шаблон непосредственно для записи res
поток:
var template = require('./template.marko');
app.use(function(req, res){
var templateData = { ... };
template.render(templateData, res);
});
При таком подходе вы получаете полный контроль над тем, какие данные передаются в ваш шаблон. Технически у вас есть доступ к res.locals
в вашем шаблоне, сделав следующее:
<div if="out.stream.locals.isAuthenticated">
НОТА: out.stream
это просто ссылка на записываемый поток, в который выполняется запись (в данном случае res
)
У вас есть несколько других вариантов:
использование res.locals
как данные шаблона
var template = require('./template.marko');
app.use(function(req, res){
var templateData = res.locals;
template.render(templateData, res);
});
Создать шаблон данных из res.locals
var template = require('./template.marko');
app.use(function(req, res){
var templateData = {
isAuthenticated: res.locals.isAuthenticated
};
template.render(templateData, res);
});
Marko также поддерживает "глобальные" данные, доступные через out.global
, Смотрите: http://markojs.com/docs/marko/language-guide/
Если у вас остались вопросы, пожалуйста, поделитесь!