Вопрос по handlebars.js, javascript, sails.js – Как настроить партиалы и макеты для руля в Sails.js?

10

я бегупаруса0.9.7 и установилиРули который поддерживаетсяConsolidate.js и, следовательно,поддерживается парусами

Я могу обслуживать страницы из.handlebars файлы, это работает просто отлично. Я могу'т, где в рабочем процессе Sails, и вПаруса путь, Я должен зарегистрировать частичные, помощники и т.д ... Я 'м больше в поисках лучших практик, чем просторабочий раствор но любая помощь будет оценена. Я '

У меня та же проблема. Я'Я пытался сделать представления / частичные / и поместить их туда, ямы пробовали во взглядах / и во взглядах / <контроллер>/ и даже взгляды / <контроллер>/ partials / :-( newz2000
Я неПаруса собираюсь забрать их автоматически. Комментарии понятныLayout support is only implemented for the ejs view engine! For most other engines, it is not necessary, since they implement partials/layouts themselves это просто нене могу сказать, как / где это должно быть сделано. Jérémie Parker
Я нене знаю, если яЯ готов отказаться от этого. Под нимпросто выразить, верно? Я'Мы использовали другие движки шаблонов с Express после небольшой настройки. Вот'что яЯ пытаюсь сделать с Sails:bearfruit.org/2013/08/22/...I» newz2000

Ваш Ответ

7   ответов
0

Для настройки шаблона руля в sails js выполните следующие шаги:

1) установить руль в вашем приложенииs папка node_modules:

npm установить руль

2) изменить ваш config / 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'
1

Я обновлю этот ответ, когда получу более подробную информацию, но если вы хотите ткнуть в него, проверьте строку 501 в прилагаемом файле consolidate.js. Посмотреть на github здесь:https://github.com/balderdashy/sails/blob/master/lib/configuration/consolidate.js#L501

Похоже, что для Handlebars есть цикл for, который регистрирует партиалы из options.partials.

Это не совсем удовлетворительное решение, но если вы добавите частички к этому объекту параметров, то, возможно, это будет полезно.

Следующий большой вопрос, который у меня возникает, заключается в том, что такое объект параметров и где он устанавливается?

options объект является прочитанным изlocals переменная передается из вашего контроллера представления. Смотрите ответ выше. cnp
2

это было довольно легко реализовать с помощью модуля express3-handlebars, при этом не изменяя ни одну из функциональных возможностей Sails по умолчанию, за исключением просьбы переместить файл макета вviews/layouts, Я'здесь открыли пулл-запрос (https://github.com/balderdashy/sails/pull/1075) если вы хотите проверить это.

Немного покопавшись в исходном коде паруса, он 'Довольно просто ввести партиалы при отображении вашего представления.

Когда вы звонитеres.view в действиях вашего контроллера просто передайте объект partials как часть вашегоместные» который содержит список частичных выЯ хотел бы оказать.

  // 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, сохраняя при этом некоторое подобие раскладок.

Где именно должна находиться папка partials? Является ли .. относительно родительского представления? Должен ли он жить в представлениях / частичных? Chris McClellan
Это не сработало для меня. Использование абсолютных и относительных путей не удалось. Chris McClellan
Для ясности, если ваш запрос на добавление объединится, яЯ с радостью приму ваш ответ, в противном случае взломать паруса сейчас не нужно, учитывая, что мыЯ хотел бы иметь возможность обновлять Sails (чтобы использовать новые функции, такие как транзакции) без необходимости каждый раз устанавливать патчи. В то же время яМы проголосовали за ваш ответ, так как он на самом деле близок к тому, что яищу, но не так многоразового использования, как хотелось бы. Jérémie Parker
Да я'Мы в основном отказались от этого. Я понял, если мне нужны частичные - я могу зарегистрировать их с помощью hbs.registerPartial (); но это одностраничное приложение, которое неНе требуется рендеринг на стороне сервера, кроме разметки головки и тела. Спасибо за ответ. Chris McClellan
2

Если ты'Используя паруса 0.10 или выше, я опубликовал пакет NPM для генерации представлений руля по умолчанию наhttps://www.npmjs.org/package/sails-generate-views-handlebars

Также предлагается PR для sails-generate-backend для правильной поддержки макетов и партилей для руля при использовании ‘паруса генерируют -шаблон == рули без дополнительного кода и автоматического обнаружения частичек на основе пути (он же вид / частичный / **)

Увидеть:https://github.com/balderdashy/sails-generate-backend/pull/9I»

4

приведенные выше, но я, кажется, заставил партиалы работать с парусами 0.9.8 без хаков.

Вот'Что у меня есть?

Config / views.js => двигатель: "рули»

views / home / index.handlebars => Основной файл с использованием частичного.

views / home / partials / part.handlebars => частичное использование.

Тогда, пока вы используете что-то подобное, это работает отлично. res.view ({частичные: {частичные: 'парциальные / частичное»нижний колонтитул: 'обертоны / сноска» }})

Пути указаны относительно файла шаблона, вызываемого по умолчанию. Так что если вы хотите разные партиалы для каждого контроллера, вы используете партиалы / и если вы хотите глобальные партиалы для всех шаблонов, которые вы используете ../partials/

Очевидно, это полностью для вас, так как вам все равно нужно вручную указывать каждую частичку в контроллере.

Да я'мы тоже это поняли, но я больше искал способ вызвать партиалы из самого шаблона,{{> partial }}, Спасибо за вашу помощь. Jérémie Parker
Где на самом деле сохраняется частичное? Частичные папки должны быть в том же месте, что и шаблон, и в нем должен быть файл с именем header.handlebars, это работает? Naman Goel
И, Джереми, я думаю, вы хотите иметь возможность импортировать партиалы из шаблона, поэтому вы можете использовать {{> путь к частичному}} Мне бы хотелось, чтобы подобное решение, но Handlebars, кажется, закодировано таким образом, что, к сожалению, необходимо зарегистрировать все частичные элементы. Naman Goel
там's модуль mmm на npm, такой же, как усы, и автоматически находит партиалы по имени пути. Я'мы использовали это с экспрессом раньше. Это неУ него нет дополнительных функций руля, но обычно он достаточно хорош. Naman Goel
так что следуя вышеизложенному{partials: {header: 'partials/header'}} и вызывая частичное{{> header}}, Я'м с учетом следующего сообщения об ошибке:verbose: Running res.view([object Object]) method... error: Error rendering view at :: error: Using layout located at :: error: Server Error (500) error: Error: The partial header could not be found Chris McClellan
8

но это не должноt влияет на то, как у меня это работает ниже:

Двигатель должен бытьрули как и ожидалосьМаршруты должны явно определять контроллер и действие. Настройка вид выигралт работа. (Если нетэто способ, которым я не могне могу разобраться с настройками паролей в файле маршрутов)Контроллеру нужны партиалы, определенные как пути относительно представления.

Config / views.js

module.exports.views = {
  engine      : 'handlebars',
  layout      : false
};

Config / 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>
ВЫХОД
<h1>HEAD</h1>
<h2>HEAD TAIL</h2>
<h3>SITE INDEX</h3>
Я использую nunjucks также. что мне нужно изменить, чтобы заставить работать няньки? Merlin
@JeremieParker Я справился с этой проблемой, сохранив все свои частичные значения в качестве литерала объекта в config / views.js, а затем использовал подчеркивание для клонирования этого объекта всякий раз, когда я отображаю новое представление:res.view({ partials: _.clone(sails.config.views.partials) }); Все еще не удаётся выяснить, как интегрировать помощников, поэтому, если кто-то знает это, пожалуйста, поделитесь. Tilo Mitra
Я решил проблему здесь:tilomitra.com/sailsjs-with-handlebars Tilo Mitra
Его ответ неполон - Вы должны явно установить контроллер и действие в определении маршрута - это 'это единственный способ заставить его работать - но яс тех пор перешел к nunjucks для наследования шаблонов mogga
0

партиалы), если мы используем расширения .handlebars для наших файлов вместо .hbs.

Поэтому для использования рулей в Sails вместо EJS рекомендуется использоватьконсолидировать(Это утешительная библиотека шаблонного движка). Рули хорошо работает с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 и обновите код внутри него.

Все будет работать нормально

EстьВид-генератор, для более поздней цели, которая будет генерировать представления по умолчанию для парусов (это создаст структуру каталогов по умолчанию с файлами по умолчанию в ней).

Вы можете найти его в хранилище github. (https://github.com/bhaskarmelkani/sails-generate-views-hbs)

Это похоже на тот, который официально запущен SailsJs для нефрита под названиемbalderdashy / паруса генерировать-видовой нефрит.

Похожие вопросы