Как настроить частичные и макеты для 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.