示例#1
0
        public string CompileBinding(string expression, Type[] contexts, Type expectedType)
        {
            var configuration = DotvvmTestHelper.CreateConfiguration();

            configuration.RegisterApiClient(typeof(TestApiClient), "http://server/api", "./apiscript.js", "_api");
            configuration.Markup.ImportedNamespaces.Add(new NamespaceImport("DotVVM.Framework.Tests.Binding"));

            var context = DataContextStack.Create(contexts.FirstOrDefault() ?? typeof(object), extensionParameters: new BindingExtensionParameter[] {
                new BindingPageInfoExtensionParameter(),
            }.Concat(configuration.Markup.DefaultExtensionParameters).ToArray());

            for (int i = 1; i < contexts.Length; i++)
            {
                context = DataContextStack.Create(contexts[i], context);
            }
            var parser         = new BindingExpressionBuilder();
            var expressionTree = parser.ParseWithLambdaConversion(expression, context, BindingParserOptions.Create <ValueBindingExpression>(), expectedType);
            var jsExpression   =
                configuration.ServiceProvider.GetRequiredService <StaticCommandBindingCompiler>().CompileToJavascript(context, expressionTree);

            return(KnockoutHelper.GenerateClientPostBackScript(
                       "",
                       new FakeCommandBinding(BindingPropertyResolvers.FormatJavascript(jsExpression, nullChecks: false), null),
                       new Literal(),
                       new PostbackScriptOptions(
                           allowPostbackHandlers: false,
                           returnValue: null,
                           commandArgs: CodeParameterAssignment.FromIdentifier("commandArguments")
                           )));
        }
示例#2
0
 public string CompileBinding(string expression, Type[] contexts, Type expectedType)
 {
     var context = DataContextStack.Create(contexts.FirstOrDefault() ?? typeof(object), extensionParameters: new BindingExtensionParameter[]{
         new BindingPageInfoExtensionParameter(),
         }.Concat(configuration.Markup.DefaultExtensionParameters).ToArray());
     for (int i = 1; i < contexts.Length; i++)
     {
         context = DataContextStack.Create(contexts[i], context);
     }
     var parser = new BindingExpressionBuilder();
     var parsedExpression = parser.ParseWithLambdaConversion(expression, context, BindingParserOptions.Create<ValueBindingExpression>(), expectedType);
     var expressionTree =
         TypeConversion.MagicLambdaConversion(parsedExpression, expectedType) ??
         TypeConversion.ImplicitConversion(parsedExpression, expectedType, true, true);
     var jsExpression = new JsParenthesizedExpression(configuration.ServiceProvider.GetRequiredService<JavascriptTranslator>().CompileToJavascript(expressionTree, context));
     jsExpression.AcceptVisitor(new KnockoutObservableHandlingVisitor(true));
     JsTemporaryVariableResolver.ResolveVariables(jsExpression);
     return JavascriptTranslator.FormatKnockoutScript(jsExpression.Expression);
 }