Handlebars.Net 如果数据不存在如何更改行为

Handlebars.Net How to change behavior if data does not exist

在Handlebars.Net中,如果没有匹配的字段,它只是在那里放置一个空白。

string source = @"My name is {{Name}} and I work at {{Job}}";
var template = Handlebars.Compile(source);
var data = new {
    Job = "Walmart"
};
var result = template(data);

结果是因为 {{Name}} 不在数据中。

My name is and I work at Walmart

有没有设置说,如果数据字段不存在就不要替换?

我想要 return:

My name is {{Name}} and I work at Walmart

我认为您必须使用 #if,如:

My name is {{#if Name}}{{Name}}{{else}}\{{Name}}{{/if}} and I work at {{Job}}

注意:我要感谢这个 answer 如何告诉 Handlebars 渲染大括号。

有两种选择:

  1. 在 1.x 中支持:使用 UnresolvedBindingFormatter

    handlebars.Configuration.UnresolvedBindingFormatter = "('{0}' is undefined)";

  2. 2.0.0-preview-1: use helperMissing hook

    开始支持
    handlebars.RegisterHelper("helperMissing", (context, arguments) =>
    {
        var name = arguments.Last().ToString();
        return "{{" + name.Trim('[', ']') + "}}";
    });
    

有关详细信息,请参阅 this GitHub issue