0

在 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}}不在数据中。

我的名字是,我在沃尔玛工作

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

我希望它返回:

我的名字是 {{Name}},我在沃尔玛工作

4

2 回答 2

5

有两种选择:

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

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

  2. 2.0.0-preview-1开始支持:使用helperMissing钩子

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

有关更多详细信息,请参阅此 GitHub 问题

于 2020-11-06T18:02:10.880 回答
0

我认为您将不得不使用#if,如:

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

注意:我要感谢这个答案,让我知道如何告诉 Handlebars 渲染大括号。

于 2020-10-15T22:26:19.983 回答