2016-06-28 96 views
2

我用mustache-sharp作爲模板引擎IsNullOrEmpty(串)和List.Count> 0小鬍子銳

我想知道反正是有使用這個模板引擎,並有檢查

1) IsNullOrEmpty(string) => e.g. {{#IsNullOrEmpty MyName}}} {{/IsNullOrEmpty}} 
2) List.Count > 0   => e.g. {{#Any Persons}} {{/Any}} 
兩個條件

任何人都可以引導我如何創建上面的標籤?

回答

1

您可以嘗試創建一個自定義ContentTagDefinitionHtmlFormatCompiler註冊。

例如:

  1. 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; 
        } 
    
    } 
    
  2. 任何

    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; 
        } 
    
    } 
    
  3. 註冊兩個標籤

    HtmlFormatCompiler compiler = new HtmlFormatCompiler(); 
    compiler.RegisterTag(new IsNullOrEmptyTagDefinition(), true); 
    compiler.RegisterTag(new AnyTagDefinition(), true);