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); }
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()); }
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); }
public void ConstructorCommonTest3() { RunTest((Expression <Func <TestAttributesModel2, string> >)(model => model.A + model.B + "!"), "((this.a + this.b) + '!')", KnockoutExpressionData.CreateConstructorData()); }
public void ConstructorCommonTest2() { RunTest((Expression <Func <TestAttributesModel, string> >)(model => model.A + model.B), "(this.a() + this.B)", KnockoutExpressionData.CreateConstructorData()); }