示例#1
0
        protected override Expression VisitPartialExpression(PartialExpression pex)
        {
            var bindingContext       = ExpressionShortcuts.Arg <BindingContext>(CompilationContext.BindingContext);
            var partialBlockTemplate = pex.Fallback != null
                ? FunctionBuilder.CompileCore(new[] { pex.Fallback }, CompilationContext.Configuration)
                : null;

            if (pex.Argument != null || partialBlockTemplate != null)
            {
                var value           = ExpressionShortcuts.Arg <object>(FunctionBuilder.Reduce(pex.Argument, CompilationContext));
                var partialTemplate = ExpressionShortcuts.Arg(partialBlockTemplate);
                bindingContext = bindingContext.Call(o => o.CreateChildContext(value, partialTemplate));
            }

            var partialName   = ExpressionShortcuts.Cast <string>(pex.PartialName);
            var configuration = ExpressionShortcuts.Arg(CompilationContext.Configuration);

            return(ExpressionShortcuts.Call(() =>
                                            InvokePartialWithFallback(partialName, bindingContext, (ICompiledHandlebarsConfiguration)configuration)
                                            ));
        }