예제 #1
0
        public KnockoutTagBuilder <TModel> DropDownList <TItem>(Expression <Func <TModel, IList <TItem> > > options, object htmlAttributes, Expression <Func <TModel, TItem, object> > optionsText)
        {
            var tagBuilder = new KnockoutTagBuilder <TModel>(Context, "select", InstanceNames, Aliases);

            tagBuilder.ApplyAttributes(htmlAttributes);
            if (options != null)
            {
                tagBuilder.Options(Expression.Lambda <Func <TModel, IEnumerable> >(options.Body, options.Parameters));
            }
            if (optionsText != null)
            {
                var data = CreateData();
                var keys = data.Aliases.Keys.ToList();
                if (!string.IsNullOrEmpty(Context.GetInstanceName()))
                {
                    foreach (var key in keys)
                    {
                        data.Aliases[Context.GetInstanceName() + "." + key] = data.Aliases[key];
                        data.Aliases.Remove(key);
                    }
                }
                data.InstanceNames = new[] { Context.GetInstanceName(), "item" };
                tagBuilder.OptionsText("function(item) { return " + KnockoutExpressionConverter.Convert(optionsText, data) + "; }");
            }
            return(tagBuilder);
        }
        private static string ExpressionToString(Type modelType, Expression expression)
        {
            var data = KnockoutExpressionData.CreateConstructorData();

            data.Aliases[modelType.FullName] = "this";
            return(KnockoutExpressionConverter.Convert(expression, data));
        }
예제 #3
0
        public KnockoutIfContext <TModel> If(Expression <Func <TModel, bool> > binding)
        {
            var regionContext = new KnockoutIfContext <TModel>(ViewContext, KnockoutExpressionConverter.Convert(binding));

            regionContext.InStack = false;
            regionContext.WriteStart(ViewContext.Writer);
            return(regionContext);
        }
예제 #4
0
        private static string GetGetExpression(Type modelType, object model, MethodInfo method)
        {
            var expression = method.Invoke(model, null) as Expression;
            var data       = KnockoutExpressionData.CreateConstructorData();

            data.Aliases[modelType.FullName] = "this";
            return(KnockoutExpressionConverter.Convert(expression, data));
        }
예제 #5
0
        public KnockoutForeachContext <TItem> Foreach <TItem>(Expression <Func <TModel, IList <TItem> > > binding)
        {
            var expression    = KnockoutExpressionConverter.Convert(binding, CreateData());
            var regionContext = new KnockoutForeachContext <TItem>(ViewContext, expression);

            regionContext.WriteStart(ViewContext.Writer);
            regionContext.ContextStack = ContextStack;
            ContextStack.Add(regionContext);
            return(regionContext);
        }
예제 #6
0
        public KnockoutWithContext <TItem> With <TItem>(Expression <Func <TModel, TItem> > binding)
        {
            Func <TModel, TItem> func = binding.Compile();
            var model         = (TItem)func((TModel)ViewContext.ViewData.Model);
            var expression    = KnockoutExpressionConverter.Convert(binding, CreateData());
            var regionContext = new KnockoutWithContext <TItem>(ViewContext, expression, model);

            regionContext.WriteStart(ViewContext.Writer);
            regionContext.ContextStack = ContextStack;
            ContextStack.Add(regionContext);
            return(regionContext);
        }
        private static IEnumerable <IPropertyConfig> GetMetaDataFor <TProperty, TItem>(Expression <Func <TProperty, TItem> > binding)
        {
            var ViewModelConfiguratorFactory = DependencyResolver.Current.GetService <IViewModelConfiguratorFactory>();
            var metadata = ViewModelConfiguratorFactory.GetViewModelConfigurator(typeof(TProperty));

            if (metadata != null)
            {
                var name = KnockoutExpressionConverter.Convert(binding, null);
                return(metadata.CreateDescriptor().GetConfigsForMember(name).ToList());
            }
            return(null);
        }
예제 #8
0
        public KnockoutTagBuilder <TModel> DropDownList <TItem>(Expression <Func <TModel, IList <TItem> > > options, object htmlAttributes = null, Expression <Func <TItem, object> > optionsText = null)
        {
            var tagBuilder = new KnockoutTagBuilder <TModel>(Context, "select", InstanceNames, Aliases);

            tagBuilder.ApplyAttributes(htmlAttributes);
            if (options != null)
            {
                tagBuilder.Options(Expression.Lambda <Func <TModel, IEnumerable> >(options.Body, options.Parameters));
            }
            if (optionsText != null)
            {
                var data = new KnockoutExpressionData {
                    InstanceNames = new[] { "item" }
                };
                tagBuilder.OptionsText("function(item) { return " + KnockoutExpressionConverter.Convert(optionsText, data) + "; }");
            }
            return(tagBuilder);
        }
예제 #9
0
        public static string Convert(Expression expression, KnockoutExpressionData convertData = null)
        {
            var converter = new KnockoutExpressionConverter();

            return(converter.LocalConvert(expression, convertData));
        }
 public static string Convert(Expression expression, KnockoutExpressionData convertData = null)
 {
     var converter = new KnockoutExpressionConverter();
     return converter.LocalConvert(expression, convertData);
 }
예제 #11
0
        public KnockoutScriptItem SetObservable(Expression <Func <TModel, object> > prop, string value)
        {
            string name = KnockoutExpressionConverter.Convert(prop);

            return(new KnockoutScriptItem(this.Context.ViewModelName + "." + name + "(" + value + ")"));
        }