Страницы

Поиск по вопросам

понедельник, 18 марта 2019 г.

Express + Node. js partial

проблема не выводит виджет (partial) в шаблон houme
houme

Добро пожаловать на сайт турфирмы

{{>weather}}
server
function getWeatherData(){ return { locations: [{ name:'Protland', forecatUrl: 'http://www.wunderground.com/US/OR/Portland.html', iconUrl: 'http://..icons-ak.wxug.com/i/c/k/cloudy.gif', weather:'Cloudy', temp: '54.1 F (12.3 C)' }, { name: 'Band', forecatUrl: 'http://www.wunderground.com/US/OR/Band.html', iconUrl: 'http://..icons-ak.wxug.com/i/c/k/rain.gif', weather:'Rain', temp: '55.0 F (12.8 C)' },
{ name: 'Minsanita', forecatUrl: 'http://www.wunderground.com/US/OR/Minzanita.html', iconUrl: 'http://..icons-ak.wxug.com/i/c/k/rain.gif', weather:'Rain', temp: '55.0 F (12.8 C)' }] }; } //Виджет app.use(function(req, res, next){ if (!res.locals.partials) res.locals.partials = {}; res.locals.partials.weatherContext = getWeatherData(); next(); });
views/partial/weather
{{#each partials.weatherContext.locations}} {{/each}}
Источник: Weather Ground

**Это пример с учебника. Почему не работает не пойму. Шаблон с ссылкой выводит нормально все что находиться в блоке each вообще не выводит.


Ответ

Уххх, как весело:) Вы используете шаблонный менеджер handlebars Обычный пакет handlebars у Вас уже 99% стоит, но сверху еще надо сделать вот так
npm i hbs
Добавляем в какую-нибудь корневую для рэндэров middleware следующий код
const hbs = require('hbs'); // лучше вне middleware // папка с partials!! hbs.registerPartial('weather', fs.readFileSync(__dirname + '/../views/partials/weather.hbs', 'utf8'));
Обратите внимание на строку с путем - начинается со слеша, задается относительно файла, в котором находится.
После указанных выше манипуляций у меня Ваш пример, хоть чуть и упрощенный стартанул. Если Вам не удастся воспроизвести по этому ответу, выложу код на гит, или дополню ответ где надо.

Комментариев нет:

Отправить комментарий