【问题标题】:What's the syntax for creating HandleBars helpers server side?创建 HandleBars 助手服务器端的语法是什么?
【发布时间】:2016-04-19 22:31:19
【问题描述】:

使用Handlebars.Net,我想创建一个HandlebarsHelper,它将用<br> 标记替换回车符和换行符。它应该看起来像这样:

string pattern = @"/(\r\n|\n|\r)/gm";
string replacement = "<br>";
Regex rgx = new Regex(pattern);

Handlebars.RegisterHelper("link_to", (string text) =>
{
    text = rgx.Replace(text, replacement);
});

编译器(或 resharper)告诉我,它无法判断我是在尝试使用 HandlebarsBlockHelper 还是 HandlebarsHelper,而且无论哪种情况我都缺少参数。

  1. 两者有什么区别?
  2. 我似乎找不到很多关于这些的文档。是否有上述两个对象以及 HelperOptions 的文档,以及如何使用 TextWriter、动态上下文和参数对象列表?

【问题讨论】:

    标签: c# handlebarshelper handlebars.net


    【解决方案1】:

    在 C# Regex 类的帮助下,它最终看起来像这样:

    var newlineRegx = new Regex("(\\r\\n|\\n|\\r)",RegexOptions.Multiline);
    
    Handlebars.RegisterHelper("handleNewLines", (output, context, arguments) =>
    {
        var str = newlineRegx.Replace((string)arguments[0], "<br>");
        output.Write(str);
    });
    

    回答我的问题:

    1. HandleBarsBlockHelper 提供了一种使用模板块调用助手的机制。然后,块助手可以使用它选择的任何上下文调用该块零次或多次。查看Helpers 的描述以了解更多信息(在底部,您会看到一个标有“了解更多:阻止助手”的按钮)。

      • TextWriter.Write 是您输出转换后文本的方式。
      • context 本质上是传递给使用 Handlebars.Compile() 创建的委托的 JSON 对象。
      • 参数对象列表包含与您定义的助手一起出现的参数,您将在 HTML 模板中使用这些参数

    为了更好地理解参数对象列表,看看我如何在我的 HTML 模板中使用这个帮助器会有所帮助:

    <div>
        <p>{{{handleNewLines StringVariable}}}</p>
    </div>
    

    其中“StringVariable”是我传递给使用 Handlebars.Compile() 创建的委托的 JSON 对象的成员

    【讨论】:

    • 也许在更高版本的库中有所改变,但我想你会发现如果你使用 output.write 你会在你的输出中得到一个安全的字符串,所以你会得到 < br>在您的输出中(无论如何,这似乎是默认情况下发生的)。首先考虑对字符串进行编码(例如使用 HandlebarsDotNet.HtmlEncoder 的“编码”方法)。这样,您将拥有一个安全编码的字符串,然后您可以在使用“output.WriteSafeString”输出它之前对其执行替换(此方法绕过我们已经完成的安全编码位)。
    • 我想知道为什么没有记录这一点,因为它似乎是车把功能的一个非常重要的部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-25
    • 2016-06-09
    • 2016-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多