public override async Task WriteAsync( TemplateScopeContext scope, PageBlockFragment block, CancellationToken token) { var collection = (IEnumerable)block.Argument.GetJsExpressionAndEvaluate(scope, ifNone: () => throw new NotSupportedException("'each' block does not have a valid expression")); var index = 0; if (collection != null) { foreach (var element in collection) { var scopeArgs = element.ToObjectDictionary(); scopeArgs["it"] = element; scopeArgs[nameof(index)] = index++; var itemScope = scope.ScopeWithParams(scopeArgs); await WriteBodyAsync(itemScope, block, token); } } if (index == 0) { await WriteElseAsync(scope, block.ElseBlocks, token); } }
public object Invoke(TemplateScopeContext scope, params object[] @params) { var args = new Dictionary <string, object>(); for (var i = 0; i < Params.Length; i++) { if (@params.Length < i) { break; } var param = Params[i]; args[param.Name] = @params[i]; } var exprScope = scope.ScopeWithParams(args); var ret = Body.Evaluate(exprScope); return(ret); }