Я использую руль с node.js и экспресс, и у меня есть собственный зарегистрированный помощник для отображения температуры, который я хотел бы иметь доступ к параметру запроса из URL-адреса страницы.
Концепция помощника заключается в том, чтобы автоматически обрабатывать преобразование Фаренгейта в Цельсия в зависимости от того, находится ли ?tempFormat=F
или tempFormat=C
в URL-адресе или нет. Вот псевдокод пользовательского помощника, который я хотел бы иметь:
hbs.registerHelper("formatTemp", function(temp) {
if (query parameter says to use Fahrenheit) {
temp = toFahrenheitStr(temp);
}
return temp;
});
Итак, я бы хотел, чтобы мой шаблон выглядел так:
{{#each temperatures}}
<div class="row {{{stripes @index}}}">
<div class="time">{{prettifyDate t}}</div>
<div class="atticTemp">{{formatTemp atticTemp}}</div>
<div class="outsideTemp">{{formatTemp outsideTemp}}</div>
<div class="spacer"></div>
</div>
{{/each}}
Сейчас я работаю над этой проблемой, вытаскивая request.query.tempFormat
и помещая его в данные, переданные для рендеринга шаблона:
app.get('/debug', function(request, response) {
var tempData = {
temperatures: data.temperatures,
units: request.query.tempFormat || "C"
};
response.render('debug', tempData);
});
И затем передать эти данные в шаблон:
{{#each temperatures}}
<div class="row {{{stripes @index}}}">
<div class="time">{{prettifyDate t}}</div>
<div class="atticTemp">{{formatTemp atticTemp ../units}}</div>
<div class="outsideTemp">{{formatTemp outsideTemp ../units}}</div>
<div class="spacer"></div>
</div>
{{/each}}
Но это кажется запутанным, потому что я должен передавать единицы измерения температуры в каждый вызов рендеринга шаблона, а затем помещать их в каждый шаблон, где я хочу, чтобы они использовались дисплеем температуры. Они уже сидят в объекте запроса. Итак, я пытаюсь понять, как получить доступ к объекту запроса из пользовательской вспомогательной функции руля? Таким образом, я мог сохранять код для каждого рендеринга и сохранять код в каждом шаблоне, а параметр запроса tempFormat
автоматически применялся к любому использованию formatTemp
в моих шаблонах.
Кто-нибудь знает, как получить доступ к объекту запроса из пользовательского помощника руля без использования глобального?
location.search
, а неlocation.pathname
, если бы это был браузер, и я стараюсь избегать использования глобальных переменных, чтобы у нескольких запросов не было проблем. - person jfriend00   schedule 03.09.2014