kzen.dev
  • Вопросы
  • Метки
  • Пользователи
Оповещения
Вознаграждения
Регистрация
После регистрации, сможете получать уведомления об ответах и комментариях на Ваши вопросы.
Вход
Если у Вас уже есть аккаунт, войдите чтобы проверить новые уведомления.
Тут будут вознаграждения за добавленные вопросы, ответы и комментарий.
Дополнительно
Источник
Редактировать
 Uri
Uri
Вопрос

Заменяет ли handlebars.js символы новой строки на <br>?

Пытаюсь использовать handlebars.js для шаблонизации, но библиотека, похоже, игнорирует новые строки.

Каков правильный способ работы с новыми строками? Должны ли они быть заменены вручную после действия шаблонизации?

36 2012-09-08T13:19:56+00:00 6
Программирование
handlebars.js
client-side-templating
Решение / Ответ
 Uri
Uri
12-го сентября 2012 в 11:51
2012-09-12T23:51:23+00:00
Дополнительно
Источник
Редактировать
#17157635

Он не делает это автоматически, но с помощью функции helpers этого можно добиться:

JS:

Handlebars.registerHelper('breaklines', function(text) {
    text = Handlebars.Utils.escapeExpression(text);
    text = text.replace(/(\r\n|\n|\r)/gm, '<br>');
    return new Handlebars.SafeString(text);
});

HTML-шаблон:

<div>
    {{breaklines description}}
</div>
 gerry3
gerry3
Редактировал ответ 24-го февраля 2015 в 1:26
83
0
Douglas  Adam Smith II
Douglas Adam Smith II
2-го августа 2013 в 9:10
2013-08-02T21:10:40+00:00
Дополнительно
Источник
Редактировать
#17157637

Вставив три скобки вместо обычных двух, вы можете дать команду handlebars прекратить обычную технику экранирования html-выражений, таких как <br> и <p>;

Например, с сайта handlebars:

"Handlebars HTML-escapes значения, возвращаемые {{выражением}}''. Если вы не хотите, чтобы Handlebars экранировал значение, используйте "тройной пробел",{{`."

    <div class="entry">
      <h1>{{title}}</h1>
      <div class="body">
        {{{body}}}
      </div>
    </div>

с этим контекстом:

    {
      title: "All about <p> Tags",
      body: "<p>This is a post about <p> tags</p>"
    }

приводит к:

    <div class="entry">
      <h1>All About <p> Tags</h1>
      <div class="body">
        <p>This is a post about <p> tags</p>
      </div>
    </div>
 Brigand
Brigand
Редактировал ответ 11-го октября 2016 в 7:45
28
0
Matt Jenkins
Matt Jenkins
8-го ноября 2015 в 1:46
2015-11-08T13:46:08+00:00
Дополнительно
Источник
Редактировать
#17157639

Вот два подхода, я предпочитаю на данный момент-принято отвечать:

  1. Использовать бело-пространстве: предварительно обертывание; " или " бело-пространстве: предварительно на элемент, где вы хотите сохранить линию-брейки (разрешение или подавление естественной линии упаковки соответственно). Если вы хотите последовательностей пробельных символов, чтобы быть свернуты, как текст в html, как правило, использовать `бело-пространстве: предварительно линию, - но, обратите внимание, что IE8 и ниже не поддерживают это. https://developer.mozilla.org/en-US/docs/Web/CSS/white-space
  2. Или здесь'ы на версию шаблона помощник, который не'т требует каких-либо копирования и вставки внешнего кода:

Шаблон.registerHelper('перегибов', функции (текст) { текст = Блейз._escape(текст); текст = текст.заменить(/(\р\н|\н|\р)/ГМ, '<БР>'); возврат новый Spacebars.SafeString(текст); });

См https://github.com/meteor/meteor/blob/devel/packages/blaze/preamble.js для Блейз._escape`

Matt Jenkins
Matt Jenkins
Редактировал ответ 8-го ноября 2015 в 5:06
10
0
 eze.scaruli
eze.scaruli
2-го ноября 2012 в 2:56
2012-11-02T14:56:21+00:00
Дополнительно
Источник
Редактировать
#17157636

Я'использовал код, опубликованный @Uri, и он оказался очень полезным.

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

Чтобы прояснить ситуацию, я должен был сделать следующее:

Handlebars.registerHelper('breaklines', function(descriptionFunction) {
    text = descriptionFunction();
    text = Handlebars.Utils.escapeExpression(text);
    text = text.toString();
    text = text.replace(/(\r\n|\n|\r)/gm, '<br>');
    return new Handlebars.SafeString(text);
});

Только так я смог заставить его работать.

1
0
 ryanw51
ryanw51
26-го июля 2015 в 2:05
2015-07-26T14:05:48+00:00
Дополнительно
Источник
Редактировать
#17157638

Любое решение, которое использует тройной бород будете открывать приложения для XSS-атак, если вы не реализуете что-то, чтобы очистить HTML-код.

Я предложил бы использовать в <предварительно> по тегу вместо того, чтобы создавать пользовательские помощником.

1
0
Nagy Wesley
Nagy Wesley
20-го августа 2019 в 11:34
2019-08-20T11:34:16+00:00
Дополнительно
Источник
Редактировать
#17157640

Для других, вроде меня, что после получения кода начала и я'т знаю, почему HTML не было появляться.

в руль документации выражений он гласит

руль в HTML-побег значений, возвращаемых {{выражение}}. Если вы Don'т хотим, руль, чтобы избежать значение, используйте "и втройне-заначка-то", {{{

0
0
Похожие сообщества 12
JavaScript Jobs — чат
JavaScript Jobs — чат
26 405 пользователей
JavaScript Jobs — чат для поиска работы и людей Правила оформления: @telegram-ru/r1WQe5F1m" rel="nofollow noopener noreferrer" class="text-blue hover:text-black link" target="_blank">https://teletype.in/@telegram-ru/r1WQe5F1m См. также: @mobile_jobs, @devops_jobs, @nodejs_jobs, @react_js, @angular_ru, @js_ru
Открыть telegram
JavaScript Noobs — сообщество новичков
JavaScript Noobs — сообщество новичков
9 515 пользователей
Помогаем друг другу разбираться с JS Правила: @js_noobs_ru/rules" rel="nofollow noopener noreferrer" class="text-blue hover:text-black link" target="_blank">https://teletype.in/@js_noobs_ru/rules Другие полезные чаты — https://github.com/goq/telegram-list или https://rudevs.network/ByKT2JwWQ
Открыть telegram
JavaScript — русскоговорящее сообщество
JavaScript — русскоговорящее сообщество
7 714 пользователей
Рекомендуем сразу отключить уведомления Правила: https://git.io/JycBd См. также: @js_noobs_ru, @nodejs_ru, @ts_cool, @react_js, @electron_cool Вакансии и поиск работы: @javascript_jobs
Открыть telegram
JavaScript.Ninja
JavaScript.Ninja
3 822 пользователей
Правила поведения проекта https://telegra.ph/Kodeks-povedeniya-proekta-JavaScriptNinja-12-15
Открыть telegram
pro.js
pro.js
3 724 пользователей
Сообщество веб (и javascript) разработчиков Чат для начинающих: @js_lib ⚠️ Вакансии - раз в неделю с вилкой зп ⚠️ Оффтоп -> @flood ❌Переход на личности ❌Троллинг ❌Реклама ❌Варез По всем вопросам: @igorz Зам: @slavik4
Открыть telegram
javascript_ru
javascript_ru
2 726 пользователей
Сообщество любителей самого популярного языка программирования в мире. Публикация вакансий: @javascript_jobs Чаты: @frontend_ru @css_ru Каналы: @defront @frontendnoteschannel Флуд: @javascript_ru_flood Важно! http://nometa.xyz и http://neprivet.ru
Открыть telegram
Добавить вопрос
Категории
Все
Технологий
Культура / Отдых
Жизнь / Искусство
Наука
Профессии
Бизнес
Пользователи
Все
Новые
Популярные
1
Денис Васьков
Зарегистрирован 15 часов назад
2
Dima Patrushev
Зарегистрирован 2 дня назад
3
sirojidddin otaboyev
Зарегистрирован 1 неделю назад
4
Елена Гайдамамакинат
Зарегистрирован 1 неделю назад
5
Иван Степанюк
Зарегистрирован 1 неделю назад
KO
RU
© kzen.dev 2023
Источник
stackoverflow.com
под лицензией cc by-sa 3.0 с атрибуцией