Шаблоны рендеринга в помощниках в handlebars

Эй, ребята!

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

вот как я бы призвал своего помощника:

<div>
    {{myHelper}}
</div>

этот помощник зарегистрирован с этим маленьким код:

hbs.registerHelper(name, function (args) {
    args = args || {};
    var template = hbs.compile(fs.readFileSync(__dirname + '/' + file, 'utf8'));
    return template(args);
});

Я поставил этот snippiet в петлю для регистрации различных помощников сразу. Это означает, что " имя " и "файл" даны.

хорошо, теперь я могу сделать что-то вроде этого:

// 'values' could be something like this:

var values = { headline: 'HEADLINE' }

<div>
    {{myHelper values}}
</div>

в помощнике теперь я могу проверить, заданы ли определенные значения:

// myHelper template

<div>
    {{#if headline}}
    <h1>{{headline}}</h1>
    {{/if}}
    <p>Lorem ipsum</p>
</div>

этот маленький метод работает для меня, но есть одна проблема. Регистрация помощника, как описано выше, возвращает простую экранированную строку HTML. Так, invocing помощник не выход не отрисованный фрагмент HTML. Он выводит HTML в виде экранированной строки.

у кого-нибудь из вас есть идея, как я могу сделать мой фрагмент кода вернуть HTML как HTML?

/Паскаль

2 ответов


С руль doc :

руль не избежит руля.SafeString. Если вы пишете помощник, который генерирует свой собственный HTML, вы обычно хочу вернуть новый руль.SafeString(результат). Таким обстоятельство, вы захотите вручную избежать параметров.

попробовать

hbs.registerHelper(name, function (args) {
    args = args || {};
    var template = hbs.compile(fs.readFileSync(__dirname + '/' + file, 'utf8'));

    // return new hbs.SafeString(template(args));
    // From @Maroshii 
    // the SafeString method must be accessed through hbs.handlebars 
    // and not directly through hbs
    // https://github.com/donpark/hbs#handlebars

    return new hbs.handlebars.SafeString(template(args));
});

Я просто хотел бы отметить, что использование тройных скобок устраняет необходимость запускать любые дополнительные методы для преобразования в HTML. Например, при доступе к данным шаблона просто используйте тройные фигурные скобки {{{templateData}}}, что позволяет получить необработанный HTML.