Как зарегистрировать помощников JavaScript на Handlebars.net

Как нам зарегистрировать этих двух помощников JavaScript в Handlebars.Net?

Для Moment.js:

Handlebars.registerHelper("formatDate", function (datetime, format) {
    return moment(datetime).format(format);
});

Для расчета сценария Java:

Handlebars.registerHelper("formatPercent", function (val1, limit) {
    return Math.ceil(100 * val1 / limit);
});m

person Charles Okwuagwu    schedule 13.06.2016    source источник


Ответы (2)


readme дает пример написания помощников:

Handlebars.RegisterHelper("link_to", (writer, context, parameters) => {
  writer.WriteSafeString("<a href='" + context.url + "'>" + context.text + "</a>");
});

string source = @"Click here: {{link_to}}";

var template = Handlebars.Compile(source);

var data = new {
    url = "https://github.com/rexm/handlebars.net",
    text = "Handlebars.Net"
};

var result = template(data);

/* Would render:
Click here: <a href='https://github.com/rexm/handlebars.net'>Handlebars.Net</a>
*/

Самое важное отличие заключается в том, что в .NET помощник не возвращает значение. Скорее, вам дается ссылка на TextWriter, который генерирует выходные данные шаблона. Таким образом, ваш помощник может записать все, что захочет, прямо в шаблон через этого писателя. Включен помощник .WriteSafeString() для обхода кодировки по умолчанию. Убедитесь, что ваша строка действительно безопасна, чтобы не кодировать при этом.

person Rex M    schedule 23.06.2016
comment
Моя основная забота заключалась в том, как вызывать функции java-скрипта из handlebars.net - person Charles Okwuagwu; 23.06.2016
comment
например, как использовать moment.js в handlebars.net - person Charles Okwuagwu; 23.06.2016
comment
@CharlesOkwuagwu handlebars.net не является мостом для запуска Javascript. Это все еще простой .NET. Таким образом, вы не можете вызывать функции javascript из него, как и вы не можете вызывать javascript из любой другой части .NET, если вы не используете эмулятор или какой-либо другой движок. - person Rex M; 23.06.2016

Нашел. Этот пример проливает свет на https://gist.github.com/rexm/e1a045b9f76a48de642e

    Handlebars.RegisterHelper("formatDate", New HandlebarsHelper(Sub(w, c, p)
                                                                     w.WriteSafeString("moment(" + p(0) + ").format(" + p(1) + ");")
                                                                 End Sub))

    Handlebars.RegisterHelper("formatPercent", New HandlebarsHelper(Sub(w, c, p)
                                                                        If p(1) = 0 Then
                                                                            w.WriteSafeString("0")
                                                                        Else
                                                                            w.WriteSafeString("Math.ceil(" + 100 * p(0) / p(1) + ");")
                                                                        End If
                                                                    End Sub))
person Charles Okwuagwu    schedule 14.06.2016
comment
Я не думаю, что это правильно. Это просто напечатает строковый момент (p1) .format (p2) в выводе шаблона. - person Rex M; 23.06.2016