Как настроить частичные и макеты для Handlebars в Sails.js?
Я запускаю Sails 0.9.7
и установил Handlebars, который поддерживается Consolidate.js и поэтому поддерживается Sails
Я могу обслуживать страницы из .handlebars
файлов, он работает отлично.
Я не могу понять, где, в рабочем процессе Sails и в режиме Sails, я должен зарегистрировать частичные файлы, помощники и т.д.... Я больше ищут лучшие практики, чем просто рабочее решение, но любая помощь будет оценена.
Ответы
Ответ 1
Я запускаю v0.10 beta, но это не должно влиять на то, как я получил его работу ниже:
- Двигатель должен быть ручками, как ожидалось
- Маршруты должны явно определять контроллер и действие. Настройка просмотра не будет работать. (Если нет способа, которым я не мог понять, как установить частичные файлы в файле маршрутов)
- Контроллеру нужны партитуры, определенные как пути относительно представления.
конфигурации /views.js
module.exports.views = {
engine : 'handlebars',
layout : false
};
конфигурации /routes.js
'/': {
controller: 'site',
action: 'index'
},
SiteController.js
module.exports = {
// Render Index View
index: function(req, res) {
res.view({
partials: {
head: 'partials/head',
tail: '../partials/tail',
},
});
}
};
просмотр/сайт/index.handlebars
{{> head}}
<h3>SITE INDEX</h3>
просмотр/сайт/обертоны/head.handlebars
<h1>HEAD</h1>
{{> tail}}
просмотр/обертоны/tail.handlebars
<h2>HEAD TAIL</h2>
OUTPUT
<h1>HEAD</h1>
<h2>HEAD TAIL</h2>
<h3>SITE INDEX</h3>
Ответ 2
Я использую ответы, приведенные выше, но, похоже, я сделал частичные работы с парусами 0.9.8 без хаков.
Вот что у меня есть.
Config/views.js = > двигатель: "руль"
views/home/index.handlebars = > основной файл с использованием частичного.
views/home/partials/partial.handlebars = > частичное использование.
Тогда, пока вы используете что-то вроде этого, он работает отлично. res.view({ partials: { частичное: "частичные/частичные", footer: 'partials/footer' } })
Пути относятся к файлу шаблона по умолчанию. Поэтому, если вам нужны разные частичные данные для каждого контроллера, вы используете partials/
и если вы хотите, чтобы глобальные частичные части для всех используемых вами шаблонов.. /partials/
Очевидно, это полностью для вас, так как вам все равно нужно указывать все частичные вручную в контроллере.
Ответ 3
Edit: это было довольно легко реализовать с помощью модуля express3-handlebars, не изменяя ни одну из функциональных возможностей Sails по умолчанию, за исключением того, что вы просили переместить файл макета в views/layouts
. Я открыл здесь запрос на перенос (https://github.com/balderdashy/sails/pull/1075), если вы хотите его проверить.
После небольшого перекопа в исходном коде паруса довольно легко принести частичные части при рендеринге вашего представления.
Когда вы вызываете res.view
в своих действиях контроллера, просто передайте объект partials как часть вашего "locals", который содержит список партиций, которые вы хотите отобразить.
// LoginController.js
new: function (req, res) {
res.view({
partials: {
header: '../partials/header',
footer: '../partials/footer'
}
})
}
// new.handlebars
{{> header}}
<b>Main content</b>
{{> footer}}
Помощники могут быть зарегистрированы аналогичным образом, присоединяя ключ с именем helpers
и передавая функциональные возможности.
Было бы неплохо, если бы был более формализованный способ сделать это в ядре Sails, но на данный момент этого достаточно для тех, кто хочет использовать дескрипторы вместо ejs, сохраняя при этом некоторое сходство макетов.
Ответ 4
FYI,
Если вы используете Sails 0.10 или выше, я опубликовал пакет NPM для создания представлений руля по умолчанию на https://www.npmjs.org/package/sails-generate-views-handlebars
Существует также предлагаемый PR для sails-generate-backend для правильной поддержки макетов и партикулов для дескриптора при использовании `sails generate -template == handlebars без дополнительного кода и автоматического обнаружения партиций на основе пути (aka. views/partial/**)
Смотрите: https://github.com/balderdashy/sails-generate-backend/pull/9
Ответ 5
У меня заканчивается время, но я думаю, что приближаюсь к ответу. Я буду обновлять этот ответ, когда я получу более подробную информацию, но если вы хотите его высунуть, проверьте строку 501 в включенном файле. Просмотреть на github здесь: https://github.com/balderdashy/sails/blob/master/lib/configuration/consolidate.js#L501
Похоже, что для Handlebars существует цикл for, который регистрирует частичные части из options.partials.
Это не совсем удовлетворительное решение, но если вы подтолкнете свои частичные объекты к этому объекту параметров, возможно, он потянет его.
У меня есть следующий вопрос: что такое объект options и где он установлен?
Ответ 6
Для настройки шаблона ручек в парусах js выполните следующие шаги:
1) установите ручки в папку приложения node_modules:
npm установить рули
2) измените конфигурацию /views.js
engine: 'handlebars',
layout: 'layouts/layout', // layouts is subfolder of view folder in sails app and layout is a handlebars inside layouts folder.
partials: 'partials'
Ответ 7
Sails поддерживает дескрипторы и его (несколько макетов, частичные) изначально, если мы используем расширения .handlebars для наших файлов вместо .hbs.
Итак, чтобы использовать рули в Sails вместо EJS, рекомендуется использовать консолидировать (его библиотеку утешения шаблона). Handlebars работает хорошо с SailsJs + консолидировать.
Вам нужно установить консолидировать.
npm install consolidate --save
И тогда вам просто нужно обновить файл config/views.js со следующим контентом.
module.exports.views = {
engine: {
ext: 'handlebars',
fn: require("consolidate").handlebars
},
layout: 'layouts/layout',
partials: 'partials/'
};
Обновите все файлы .ebs в файлах .handlebar и обновите код внутри него.
Все будет нормально работать.
Существует генератор представлений, для более поздней цели, который будет генерировать представления по умолчанию для Sails (он будет создавать структуру каталогов по умолчанию с файлами по умолчанию в нем).
Вы можете найти его в репозитории github. (https://github.com/bhaskarmelkani/sails-generate-views-hbs)
Он похож на тот, который официально был выпущен SailsJs для нефрита под названием balderdashy/sails-generate-views-jade.