protected override void ConfigureBinding(KnockoutTagBuilder <TModel> tagBuilder)
 {
     if (this.Metadata != null)
     {
         var first = (IListSourceConfig)this.Metadata.FirstOrDefault(m => m.GetType().GetInterfaces().Any(p => p == typeof(IListSourceConfig)));
         if (first != null)
         {
             var propertyName = KnockoutExpressionConverter.Convert(Binding, null);
             propertyName += "." + first.Name;
             tagBuilder.Custom("options", propertyName, false);
             tagBuilder.OptionsText(first.OptionsText, true);
             tagBuilder.OptionsValue(first.OptionsValue, true);
         }
     }
     else
     {
         if (SelectOptions != null)
         {
             tagBuilder.Options(Expression.Lambda <Func <TModel, IEnumerable> >(SelectOptions.Body, SelectOptions.Parameters));
         }
         if (SelectOptionsText != null)
         {
             var data = new KnockoutExpressionData {
                 InstanceNames = new[] { "item" }
             };
             tagBuilder.OptionsText("function(item) { return " + KnockoutExpressionConverter.Convert(SelectOptions, data) + "; }");
         }
     }
 }
        private static string GetServerUrlExpression <TModel>(KnockoutExpressionData data, string action, string controller, string parameterName, Expression <Func <TModel, object> > parametersGetter)
        {
            if (!string.IsNullOrWhiteSpace(parameterName) && parametersGetter == null)
            {
                throw new InvalidOperationException("Url parameter getter is miss");
            }

            string expression;

            if (parametersGetter == null)
            {
                expression = "'" + GetUrlHelper().Action(action, controller) + "'";
            }
            else
            {
                var getterExpression = KnockoutExpressionConverter.Convert(parametersGetter, data);
                if (string.IsNullOrWhiteSpace(getterExpression))
                {
                    throw new InvalidOperationException("Url parameter getter is invalid");
                }

                if (parametersGetter.Body.NodeType == ExpressionType.MemberAccess)
                {
                    getterExpression += "()";
                }
                expression = GetUrl(action, controller, parameterName, getterExpression);
            }
            return(expression);
        }
        public void InstanceNamesTest02()
        {
            var data = new KnockoutExpressionData {
                InstanceNames = new[] { "X", "Y", "Z" }
            };

            RunTest((Expression <Func <TestModel, TestModel, TestModel, string> >)((x, y, z) => x.A + y.B + z.C), "X.A()+Y.B()+Z.C()", data);
        }
        public void InstanceNamesTest01()
        {
            var data = new KnockoutExpressionData {
                InstanceNames = new[] { "$parent" }
            };

            RunTest((Expression <Func <TestModel, string> >)(model => model.A), "$parent.A", data);
        }
Example #5
0
        private void RunTest(Expression expression,
                             string expected,
                             KnockoutExpressionData data = null)
        {
            string actual = KnockoutExpressionConverter.Convert(expression, data);

            AssertStringEquivalent(expected, actual);
        }
        private static string GetServerUrlExpression <TModel>(KnockoutExpressionData data, Expression <Func <TModel, string> > urlGetter)
        {
            var expression = KnockoutExpressionConverter.Convert(urlGetter, data);

            if (string.IsNullOrWhiteSpace(expression))
            {
                throw new InvalidOperationException("Url getter is invalid");
            }
            return(expression);
        }
        public void AliasesTest01()
        {
            var model      = new TestModel();
            var property   = typeof(TestModel).GetProperty("Concatenation");
            var method     = property.GetGetMethod();
            var expression = method.Invoke(model, null) as Expression;
            var data       = KnockoutExpressionData.CreateConstructorData();

            data.Aliases[typeof(TestModel).FullName] = "this";
            RunTest(expression, "'#'+this.A()+this.B()+this.C()", data);
        }
            public override string GetKnockoutExpression(KnockoutExpressionData data)
            {
                if (ValueExpression == null)
                {
                    throw new InvalidOperationException("Value expression is miss");
                }

                var stringBuilder = new StringBuilder();

                stringBuilder.Append(Name);
                stringBuilder.Append(" : ");
                stringBuilder.Append(ValueExpression(data));
                return(stringBuilder.ToString());
            }
            public sealed override string GetKnockoutExpression(KnockoutExpressionData data)
            {
                if (UrlExpression == null)
                {
                    throw new InvalidOperationException("Url expression is miss");
                }

                var stringBuilder = new StringBuilder();

                stringBuilder.Append(Name);
                stringBuilder.Append(" : ");
                stringBuilder.Append("function() {");
                stringBuilder.AppendFormat("executeOnServer($root, {0})", UrlExpression(data));
                stringBuilder.Append(";}");
                return(stringBuilder.ToString());
            }
 public void ConstructorCommonTest3()
 {
     RunTest((Expression <Func <TestModel, string> >)(model => model.A + model.B + "!"), "this.A() + this.B() + '!'", KnockoutExpressionData.CreateConstructorData());
 }
 public void ConstructorCommonTest1()
 {
     RunTest((Expression <Func <TestModel, string> >)(model => model.A), "this.A()", KnockoutExpressionData.CreateConstructorData());
 }
 private void RunTest(Expression expression, string expected, KnockoutExpressionData data = null)
 {
     string actual = KnockoutExpressionConverter.Convert(expression, data);
       AssertStringEquivalent(expected, actual);
 }
 public void InstanceNamesTest02()
 {
     var data = new KnockoutExpressionData { InstanceNames = new[] { "X", "Y", "Z" } };
       RunTest((Expression<Func<TestModel, TestModel, TestModel, string>>)((x, y, z) => x.A + y.B + z.C), "((X.A()+Y.B())+Z.C())", data);
 }
 public void InstanceNamesTest01()
 {
     var data = new KnockoutExpressionData { InstanceNames = new[] { "$parent" } };
       RunTest((Expression<Func<TestModel, string>>)(model => model.A), "$parent.A", data);
 }
Example #15
0
 public void ConstructorCommonTest3()
 {
     RunTest((Expression <Func <TestAttributesModel2, string> >)(model => model.A + model.B + "!"),
             "((this.a + this.b) + '!')", KnockoutExpressionData.CreateConstructorData());
 }
Example #16
0
 public void ConstructorCommonTest2()
 {
     RunTest((Expression <Func <TestAttributesModel, string> >)(model => model.A + model.B), "(this.a() + this.B)",
             KnockoutExpressionData.CreateConstructorData());
 }