【问题标题】:IsNullOrEmpty(string) and List.Count > 0 in mustache-sharpIsNullOrEmpty(string) 和 List.Count > 0 in mustache-sharp
【发布时间】:2016-10-30 23:29:54
【问题描述】:
我使用mustache-sharp作为模板引擎
我想知道使用这个模板引擎是否还有两个条件可供检查
1) IsNullOrEmpty(string) => e.g. {{#IsNullOrEmpty MyName}}} {{/IsNullOrEmpty}}
2) List.Count > 0 => e.g. {{#Any Persons}} {{/Any}}
谁能指导我如何创建像上面这样的标签?
【问题讨论】:
标签:
c#
template-engine
mustache
【解决方案1】:
您可以尝试创建一个自定义的ContentTagDefinition并在HtmlFormatCompiler中注册。
例如:
-
IsNullOrEmpty
public class IsNullOrEmptyTagDefinition : ContentTagDefinition
{
private const string conditionParameter = "condition";
public IsNullOrEmptyTagDefinition()
: base("IsNullOrEmpty")
{}
public override IEnumerable<TagParameter> GetChildContextParameters()
{
return new TagParameter[0];
}
public override bool ShouldGeneratePrimaryGroup(Dictionary<string, object> arguments)
{
object condition = arguments[conditionParameter];
return isConditionSatisfied(condition);
}
protected override IEnumerable<TagParameter> GetParameters()
{
return new TagParameter[] { new TagParameter(conditionParameter) { IsRequired = true } };
}
protected override bool GetIsContextSensitive()
{
return false;
}
private bool isConditionSatisfied(object condition)
{
if (condition == null)
{
return true;
}
return condition is string ? string.IsNullOrEmpty(condition as string) : false;
}
}
-
任何
public class AnyTagDefinition : ContentTagDefinition
{
private const string conditionParameter = "condition";
public AnyTagDefinition()
: base("Any")
{}
public override IEnumerable<TagParameter> GetChildContextParameters()
{
return new TagParameter[0];
}
public override bool ShouldGeneratePrimaryGroup(Dictionary<string, object> arguments)
{
object condition = arguments[conditionParameter];
return isConditionSatisfied(condition);
}
protected override IEnumerable<TagParameter> GetParameters()
{
return new TagParameter[] { new TagParameter(conditionParameter) { IsRequired = true } };
}
protected override bool GetIsContextSensitive()
{
return false;
}
private bool isConditionSatisfied(object condition)
{
if (condition is IEnumerable)
{
return (condition as IEnumerable).Cast<object>().Any();
}
return false;
}
}
-
注册两个标签
HtmlFormatCompiler compiler = new HtmlFormatCompiler();
compiler.RegisterTag(new IsNullOrEmptyTagDefinition(), true);
compiler.RegisterTag(new AnyTagDefinition(), true);