永利官方网站看一下后台的业务逻辑,作者是来搞培养和磨炼的

前言:

话说到新的专营商已经呆了八个礼拜了,从上班的第③天起头就一贯在写项目文书档案和给开发职员培养和锻练,以至于小编的QQ签名从”小编不是来搞培养和演习的“到结尾直接换来”小编是来搞培训的“。

就算如此名义开发经营,但下边近年来就四人,手下的人尽管混过了2年工龄,但连进程,线程,泛型,面向对象等基础都摸不着头脑的小女孩,要指望他们写代码,只可以时不时的抽空给讲基础了。

话说前一周的前一周还会从Boss的该校里招来二十多少个学生过来实习,要自身表明项目,写出详细的文书档案,然后简短培养和练习下学生,让学员瞧着文书档案就能源办公室事,领会了自个儿是来搞培养和磨练的。

好了,玩笑过后,下边讲讲当前用EasyUI遇到的几点难题:

上一节:“爱说说”技术原理:与TXT交互及MDataTable对Json的意义增加 中,

1:兼容IE8问题

话说当前新型版本easyUI
1.3.4不协理ie8,据悉是jq2.0不援救的由来,只可以降级使用到easyui
1.3.2,对应的jq1.8本子。

 

2:Form表单的CheckBox问题

easyUI有个Form表单的自发性赋值:$(“#id”).form(‘load’,json);

一开头用如此的代码:

using (MAction action = new MAction(TableNames.Roles))
{
   if (action.Fill(ID))
   {
     return  action.Data.ToJson();
   }
}

结果发现再次回到的json怎么也给checkbox赋不了值,网上也没相应的材质好寻,最后调一下js,看到普通的input赋值,想到了on。

于是把重临的true替换来on,[action.Data.ToJson().Replace(“True”, “on”)] 就能够了。

 

大家缓解了TXT数据存款和储蓄和Json的互动难题,本节,看一下后台的事体逻辑:

3:DataGrid里的CheckBox问题:

对于表格,要求将某个bool型的字段格式化成checkbox展现,找到了半天,发现只有用formatter格式化出来自个儿的样式:

 var formatCheckBox = function (value, row, index) {
        if (value == “1” || value == “True”) {
            return “<input type=’checkbox’ checked=’checked’ disabled=’disabled’ />”;
        } else {
            return “<input type=’checkbox’ disabled=’disabled’  />”;
        }
    }

下一场界面钦定:

 <th  data-options=”田野:’IsEnabled’,formatter:formatCheck博克斯” > 是或不是启用</th>

悲催的是,格式出来的控件,没有相应的API能够获取有关的值,近期的处理措施只能通过扩大点击事件,来处理后续情形改变后值的交由。

 

4:Tree 的绑定(MDataTable报表直接转Json,不用反复查询数据库):

商量了须臾间Tree的绑定的json格式,然后写了1个递归函数,直接把三个MDataTable转成树型的Json。

 // string id,string parentID,string text,string state,string url
        /// <summary>
        /// 将表格转成Tree对应的Json,对应的字段为(id,parentiID,text,state,url)
        /// </summary>
        /// <param name=”dt”></param>
        /// <param name=”parentID”>为0或为空</param>
        /// <returns></returns>
        public static string ToTreeJson(MDataTable dt, string parentID)
        {
            List<MDataRow> firstDt = dt.FindAll(“ParentID='” + parentID + “‘”);//第顶尖菜单
            if (firstDt.Count > 0)
            {
                MDataRow row = null;
                JsonHelper json = new JsonHelper();
                string id, text, url;
                for (int i = 0; i < firstDt.Count; i++)
                {
                    row = firstDt[i];
                    id = row.Get<string>(“id”);
                    text = row.Get<string>(“text”);
                    json.Add(“id”, id);
                    json.Add(“text”, text);

                    url = row.Get<string>(“url”);
                    if (!string.IsNullOrEmpty(url))
                    {
                        json.Add(“attributes”, “{\”url\”:\”” + url + “\”}”, true);
                    }
                    string children = ToTreeJson(dt, id);
                    if (!string.IsNullOrEmpty(children))
                    {
                        if (row.Get<bool>(“state”))
                        {
                            json.Add(“state”, “closed”);
                        }
                        json.Add(“children”, children, true);
                    }
                    json.AddBr();
                }
                return json.ToString(true);
            }
            return string.Empty;

对于传进来的MDataTable,需求修改列名和相应的字段对上,然后保留二个通用的上边字段(ParentID)就足以了,最终就出去那种格式了。

永利官方网站 1 

爱说说:http://speak.cyqdata.com/ [近来版本已增加了音乐和神采]

5:TreeGrid的绑定:

在成效权限这一块,须求用到TreeGrid那种格式,最后发现决定上下级的json,是叫“_parentId”,还有该字段不能够钦命1个不设有的上级,不然不展现。

对于这么些,笔者也写了一个简单易行的转移函数:

 /// <summary>
        /// 将表格转成GreeGrid对应的Json.
        /// </summary>
        /// <param name=”dt”></param>
        /// <returns></returns>
        public static string ToTreeGridJson(MDataTable dt)
        {
            int index = dt.Columns.GetIndex(“ParentID”);
            if (index > -1)
            {
                dt.Columns[index].ColumnName = “_parentId”;
                int value = 0;
                foreach (MDataRow row in dt.Rows)
                {
                    value = row.Get<int>(index);
                    if (value == 0 || row.Get<int>(“id”) == value)//GreeGrid不设有的父ID无法现身
                    {
                        row[index].Value = DBNull.Value;
                    }
                }
            }
            return dt.ToJson(true, false);
        }

树形的功用就出来了:

永利官方网站 2 

如今项目刚起首,只境遇并拍卖了那多少个着力的问题,后续若反常待定。 

 

总结:

话说男女搭配,干活不累,是有那么点道理。

 

先看Page_Load事件:

      public override void Page_Load()
        {
            if (day == 0)//第四回初阶化
            {
                day = Now.Day;
            }
            switch (GetInt(“t”))
            {
                case 1://添加音信
                    if (PostBufferOK(0.05))//同一IP3秒提交2遍
                    {
                        outHtml = Add(Get(“n”), Get(“v”),
GetInt(“pid”));
                    }
                    break;
                case 2://删除音信
                    outHtml = Del(GetInt(“v”));
                    break;
                case 3://获取越多音讯
                    outHtml = Select(GetInt(“v”), GetInt(“s”));
                    break;
                case 4://获取最新音讯
                    outHtml = Select(GetInt(“v”));
                    break;
            }
        }

证实:通过分支,调用了不一致的法子,最终经过outHtml输出Json到客户端。

 

上面举办详细的分支演讲:

 

一:数据交到:[用户发表消息或应对音讯时交由的数目]

 

参数约定:

品种参数:t=1

文件参数:v=”那是付出的剧情”;

别名参数:n=”路过高商”

回应参数:pid=-1,[回应时带回应消息的ID,非回应则为-1]

 

逻辑代码:

        /// <summary>
        /// 公布音信
        /// </summary>
        public string Add(string nickName, string body, int pid)
        {
            MDataRow row = Table.NewRow();
            int maxID = MaxID;
            row.Set(0, maxID);
            row.Set(“ParentID”, pid);
            row.Set(“UserID”, IP.Replace(“.”,string.Empty));
            row.Set(“NickName”, nickName);
            row.Set(“Body”, body);
            row.Set(“CreatedOn”, Now);
            Table.Rows.Add(row);//内部存款和储蓄器表加一行
            AppendText(row.ToJson());//写入TXT文本一行
            return maxID.ToString();
        }

 

二:数据删除:[用户删除钦命ID数据]

 

参数约定:

品类参数:t=2

行ID参数:v=88 [被去除行的ID]

 

逻辑代码

        /// <summary>
        /// 删除音讯
        /// </summary>
        public string Del(int id)
        {
            MDataRow row = Table.FindRow(“ID”, Op.Equal, id);
            if (row != null)
            {
                RemoveText(row.ToJson());//删除文本一行
                Table.Rows.Remove(row);//删除内部存款和储蓄器表一行
            }
            return id.ToString();
        }

 

三:数据加载[第一回加载及点击“浏览越多时”加载]

 

参数约定:

类型参数:t=3

值ID参数:v=id
[小小ID,加载时都以取的最新的多少,每趟都从后边取,所以比较短小ID]

分页参数:s=20[每次20条消息]

 

逻辑代码

        public string Select(int minID, int pageSize)
        {
            Op op = minID < 1 ? Op.None :
Op.Small;//Small就是”<“号了
            return Table.Select(1, pageSize, true, “ID”, op,
minID).ToJson();
        }

 

四:定时多少加载[定时多少秒取3回数据]

 

参数约定:

花色参数:t=4

值ID参数:v=id,[最大ID,每回依据最大ID举行查询最新音讯]

 

逻辑代码

        public string Select(int maxID)
        {
            if (maxRowID >= maxID)//下面的Big就是”>”号了
            {
                return Table.Select(1, 60, true, “ID”, Op.Big,
maxID).ToJson();
            }
            return string.Empty;
        }

 

五:总体规划[任何逻辑代码]

 

地点四点,是比较首要八个逻辑,接下去补全一些旁支代码。

 

1:全局的概念:

        private static int maxRowID = 0;//行ID
        private static MDataTable _Table = null;//后天的数据表
        private static int day = 0;//今天

说明:

maxRowID,那是为了确定保证每条数据都有3个不重复的ID。

_Table:定义为静态的,不难的就叫内部存款和储蓄器表。

day:由于TXT文本只保留一天数据,提交时索要看清是过天,若是是,必要新建新的TXT。 

 

2:方法属性

 

2.1:内存表:

        public MDataTable Table
        {
            get
            {
                if (_Table == null || day !=
Now.Day)//第2遍/缓存失效/第1天
                {
                    if (_Table != null)
                    {
                       
_Table.Rows.Clear();//第一天,清除前一天数据行
                    }
                    else
                    {
                        day = Now.Day;
                    }
                    //尝试加载文件
                    _Table =
MDataTable.LoadFromJson(LoadText());//从文本加载
                    if (_Table.Columns.Count == 0)
                    {
                        _Table.Columns.Add(“ID”,
SqlDbType.Int);//ID标识
                        _Table.Columns.Add(“ParentID”,
SqlDbType.Int);//>0表达是回贴
                        _Table.Columns.Add(“UserID”, SqlDbType.Int);
                        _Table.Columns.Add(“NickName”,
SqlDbType.NVarChar);
                        _Table.Columns.Add(“Body”,
SqlDbType.NVarChar);//内容
                        _Table.Columns.Add(“CreatedOn”,
SqlDbType.Date提姆e);//创立日期
                       
AppendText(_Table.Columns.ToJson());//首行写表架构音讯
                    }
                }
                return _Table;
            }
        }

2.2:最大行ID

        public int MaxID
        {
            get
            {
                if (maxRowID > 0)//平常状态
                {
                    maxRowID++;
                }
                else if (_Table != null && _Table.Rows.Count >
0)//缓存失效
                {
                    maxRowID =
int.Parse(Convert.ToString(_Table.Rows[_Table.Rows.Count –
1][0].Value)) + 1;
                }
                else//第一次
                {
                    maxRowID = 1;
                }
                return maxRowID;
            }
        }

2.3:文件的保存路径:这几个不多解释了

        public string FilePath
        {
            get
            {
                string path = AppDomain.CurrentDomain.BaseDirectory +
“txtFile/” + Now.ToString(“yyyyMM”) + “/”;
                if (!Directory.Exists(path))
                {
                    Directory.CreateDirectory(path);
                }
                path = path + Now.Day + “.txt”;
                if (!File.Exists(path))
                {
                    File.Create(path).Close();
                }
                return path;
            }
        }

3:MDataTable 的Select函数介绍:能够一本万利查询满意条件的行

        /// <summary>
        /// 表查询[支撑分页与单个条件]
        /// </summary>
        /// <param name=”pageIndex”>页索引</param>
        /// <param name=”pageSize”>每页多少条</param>
        /// <param name=”reverse”>反转排序</param>
        /// <param name=”column”>条件列</param>
        /// <param name=”op”>条件符号</param>
        /// <param name=”value”>条件过滤值</param>
        /// <returns>重临新的MDataTable</returns>
        public MDataTable Select(int pageIndex, int pageSize, bool
reverse, string column, Op op, object value)

 

说到底计算:

 

本节的后台逻辑代码就到此停止。

当然“爱说说”后边扩张和完善了好多,本文就不纠结的多少个三个讲了,

只把大致效能讲完,就开源了,大伙再细看细节方面代码。

 

下一节大家讲客户端调用及优化等注意事项,敬请关心。

 

相关文章