EasyUI:

前端UI框架之一, 相对ExtJs来说,算是小了,这两天,抽空看了下EasyUI的相关知识,基本上可以和大伙分享一下:

官网: http://www.jeasyui.com/

学习的话,基本上思路就三个:

一个是Demo,把所有提供的Controls看一遍,然后用到哪个,就去看哪个。

一个是Document,如果某个控件需要用JS编码控制,可能需要看一下相关的API提供的属性,事件和方法。

一个是搜相关的文章,看看一些网上的示例或教程文章。

由于EasyUI是基于JQ的语法,所以最好备有JQ的API手册。

EasyUI 易遇到的坑:

如下图,折腾基本的增删改查+分页(费了我不少时间,遇到几个坑):

基本用法,可以看官网的Demo,这里说下我遇到的几个问题:

1:分页和加载数据问题: 

一开始由于不知道表格的需要的默认Json格式,所以只能动态绑定数据,大体代码如下:

$.getJSON("json.ashx",function(result){$("#dg").datagrid("loadData",result.data);}

然后又要另外把记录总数赋给分页控件:

$.getJSON("json.ashx",function(result){$("#dg").datagrid("loadData",result.data);$("#db").datagrid("gerPager").pagination({"total":result.count});}

折腾了N久后,发现了Json的格式,只要输出的Json格式按它的要求,只要指定url就可以了,分页控件也会自动绑定,输出的格式为:

{"total":"42","errorMsg":"","success":"true","rows":[{"ID":"1","UserName":"22222","CreateTime":"2012/9/27 17:13:52"},{"ID":"2","UserName":"2","CreateTime":"2012/9/27 17:12:05"},{"ID":"3","UserName":"1","CreateTime":"2013/4/18 18:18:22"},{"ID":"7","UserName":"ttttttttttt","CreateTime":"2012/9/27 17:15:33"},{"ID":"8","UserName":"ttttttt","CreateTime":""},{"ID":"9","UserName":"999","CreateTime":""},{"ID":"10","UserName":"2222","CreateTime":""},{"ID":"11","UserName":"333","CreateTime":""},{"ID":"12","UserName":"44","CreateTime":""},{"ID":"13","UserName":"55","CreateTime":""}]}

其中total和rows数组是标配字段名,刚好CYQ.Data后台表格的输出代码是count和data,名称不一致,为了更方便支持easyui,只好把输出名改成一致了。

2:重复发送请求的问题:

当通过以下代码指定请求url时,发现请求发送了2次:

 $(function () {

                $("#dg").datagrid({

                    "url": "Json.ashx",

                    "pagination":true

                });

            });

后来寻得,把html中的class去掉即可。

 <table id="dg" title="My Users" class="easyui-datagrid"

 变更为:

 <table id="dg" title="My Users" 

CYQ.Data 快速开发EasyUI:

为了与EasyUI配合的更方便,我对CYQ.Data框架的JsonHelper这个类小小调整了几个小点,使的开发更爽了一些。 

1:数据加载与分页:

前端按EasyUI的Demo,而后端代码可以写成通杀式代码如下:

 public string OutJson(string tName, int pageIndex, int pageSize, string where)

        {

            string json = string.Empty;

            using (MAction action = new MAction(tName))

            {

                json=action.Select(pageIndex, pageSize, where).ToJson();//输出的格式直接迎合easyUI

            }

            return json;

        }

一个URL过来,根据参数指定表名和条件直接返回,通杀。

2:新增加和更新通杀式代码:

public string UpdateOrInsert(string tName,int id) //默认easyUI会自动Post数据过来,这里采用自动取值。
        {
            bool result = false;
            using (MAction action = new MAction(tName))
            {
                if (id > )
                {
                    result=action.Insert(true);
                }
                else
                {
                    result=action.Update(id, true);
                }
            }
            return JsonHelper.OutResult(result, result ? "" : "操作失败!");//新增的方法,配合easyUI需要的保存提示。
        }

3:删除通杀式代码:

 public string Delete(string tName, int id)
        {
            bool result = false;
            using (MAction action = new MAction(tName))
            {
               result = action.Delete(id);
            }
            return JsonHelper.OutResult(result, result ? "" : "操作失败!");
        }

基本后台属于小调整就可以通杀了,基础的CRUD开发起来还是相当简单的。

补充:界面UI的HTML代码

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <link rel="stylesheet" type="text/css" href="/easyui/themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="/easyui/themes/icon.css">
    <link rel="stylesheet" type="text/css" href="http://www.jeasyui.com/easyui/demo/demo.css">
    
    <script src="/easyui/jquery.min.js"></script>
    <script src="/easyui/jquery.easyui.min.js"></script>
</head>
   
<body>
<%--     <div id="p" class="easyui-progressbar" style="width:400px;"></div> 
   <script>
        $(function () {
            var value = $("#p").progressbar("getValue");
            while (value < )
            {
                value += 0.1;
                $("#p").progressbar("setValue",value);
            }
        }
        );
    </script>
    <hr />--%>

<table id="dg" title="EasyUI+CYQ.Data"  style="width:550px;height:250px"
        toolbar="#toolbar" closable="true"
        rownumbers="true" fitColumns="true" singleSelect="true" >
    <thead>
        <tr>
            
                <th field="firstname" width="50">First Name</th>
                <th field="lastname" width="50">Last Name</th>
                <th field="phone" width="50">Phone</th>
                <th field="email" width="50">Email</th>
            
           <%-- <th field="ID" width="">ID            </th>
            <th field="UserName" width="">UserName</th>
            <th field="CreateTime" width="">CreateTime</th>--%>
        </tr>
    </thead>
</table>
     <div id="toolbar">
        <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-add" plain="true" onclick="newUser()">New User</a>
        <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-edit" plain="true" onclick="editUser()">Edit User</a>
        <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-remove" plain="true" onclick="destroyUser()">Remove User</a>
    </div>
        <div id="dlg" class="easyui-dialog" style="width:400px;height:280px;padding:10px 20px"
            closed="true" buttons="#dlg-buttons">
        <div class="ftitle">User Information</div>
        <form id="fm" method="post" novalidate>
            <div class="fitem">
                <label>UserName:</label>
                <input name="UserName" class="easyui-validatebox" required="true" />
            </div>
            <div class="fitem">
                <label>CreateTime:</label>
                <input name="CreateTime" />
            </div>
        </form>
    </div>
    <div id="dlg-buttons">
        <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-ok" onclick="saveUser()">Save</a>
        <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-cancel" onclick="javascript:$('#dlg').dialog('close')">Cancel</a>
    </div>

<input type="button" onclick="search();" value="Search" />
        <script>
            //$.getJSON("json.ashx",function(result){$("#dg").datagrid("loadData",result.data);$("#db").datagrid("gerPager").pagination({"total":result.count});}
            var dg = $('#dg');
            var a = "1";
            var b = "2";
            var qp = { "a": a, "b": b };
            function search()
            {
                a = "2";
                b = "3";
                dg.datagrid("options").queryParams = { "a": a, "b": b };
                dg.datagrid("reload");
            }
            $(function () {
                dg.datagrid({
                    "url": "http://www.jeasyui.com/demo/main/get_users.php",
                    "queryParams": qp,
                    "pagination":true
                });
            });
            function newUser()
            {
                $("#dlg").dialog("open").dialog('setTitle', 'New User');;
                $('#fm').form('clear');
                url = 'json.ashx?t=1';
            }
            function saveUser()
            {
                $('#fm').form('submit', {
                    url: url,
                    onSubmit: function () {
                        return $(this).form('validate');
                    },
                    success: function (result) {
                        var result = eval('(' + result + ')');
                        if (result.errorMsg) {
                            $.messager.show({
                                title: 'Error',
                                msg: result.errorMsg
                            });
                        } else {
                            $('#dlg').dialog('close');        // close the dialog
                            $('#dg').datagrid('reload');    // reload the user data
                        }
                    }
                });
            }
            function editUser()
            {
                var row = $('#dg').datagrid('getSelected');
                if (row) {
                    $('#dlg').dialog('open').dialog('setTitle', 'Edit User');
                    $('#fm').form('load', row);
                    url = 'json.ashx?t=2&id=' + row.id;
                }
            }
            function destroyUser() {
                var row = $('#dg').datagrid('getSelected');
                if (row) {
                    $.messager.confirm('Confirm', 'Are you sure you want to destroy this user?', function (r) {
                        if (r) {
                            $.post('json.ashx', { id: row.id }, function (result) {
                                if (result.success) {
                                    $('#dg').datagrid('reload');    // reload the user data
                                } else {
                                    $.messager.show({    // show error message
                                        title: 'Error',
                                        msg: result.errorMsg
                                    });
                                }
                            }, 'json');
                        }
                    });
                }
            }
        </script>
     <style type="text/css">
        #fm{
            margin:;
            padding:10px 30px;
        }
        .ftitle{
            font-size:14px;
            font-weight:bold;
            padding:5px 0;
            margin-bottom:10px;
            border-bottom:1px solid #ccc;
        }
        .fitem{
            margin-bottom:5px;
        }
        .fitem label{
            display:inline-block;
            width:80px;
        }
    </style>
</body>
</html>

总结:

1:EasyUI这个前端框架还是不错的,虽然商业使用是需要付费的,但是对公司来说小钱,而且多数小公司根本没打算交钱。

2:CYQ.Data 经过小调整,能够更简便的支持EasyUI开发。

3:如果你是用的开源版本V4.55,若需要支持EasyUI,JsonHelper类的输出,把Count变为Total,把data改成rows即可。

CYQ.Data 快速开发EasyUI的更多相关文章

  1. CYQ.Data 快速开发之UI(赋值、取值、绑定)原理

    昨夜园子猴子问了几个我CYQ.Data使用的小问题,经过简单解答后,他表示“妈妈再也不用担心我的学习",并于事后以资鼓励,希望这框架越走越好. 除了技术上的交流,双方在生活,S上面的问题上也 ...

  2. 快速开发之代码生成器(asp.net mvc4 + easyui + knockoutjs)

    一.前言 作为一个码农这么多年,一直在想怎么提高我们的编码效率,关于如何提高编码效率,我自己的几点体会 1.清晰的项目结构,要编写代码的地方集中 2.实现相同功能的代码量少并且清晰易懂 3.重复或有规 ...

  3. CYQ.Data V5 分布式缓存Redis应用开发及实现算法原理介绍

    前言: 自从CYQ.Data框架出了数据库读写分离.分布式缓存MemCache.自动缓存等大功能之后,就进入了频繁的细节打磨优化阶段. 从以下的更新列表就可以看出来了,3个月更新了100条次功能: 3 ...

  4. Django+easyui 快速开发

    Django的使用我们可以查看上一篇博客,今天我们要在Django中使用easyui快速开发,在我们安装好Django, 我们可以道改地址那一下easyui 官方API文档(http://downlo ...

  5. MVC通用控件库展示-MVC4.0+WebAPI+EasyUI+Knockout--SNF快速开发平台3.0

    在我们开发中怎么才能提高效率,就是要有大量的公共组件(控件)可以直接使用而不用自己再开发一遍,既然是公共控件那也得简单实用才行.下面就介绍一下SNF-MVC当中的控件库. 总体控件库展示: 1.通用用 ...

  6. SNF快速开发平台3.0之BS页面展示和九大优点-部分页面显示效果-Asp.net+MVC4.0+WebAPI+EasyUI+Knockout

    一)经过多年的实践不断优化.精心维护.运行稳定.功能完善: 能经得起不同实施策略下客户的折腾,能满足各种情况下客户的复杂需求. 二)编码实现简单易懂.符合设计模式等理念: 上手快,见效快.方便维护,能 ...

  7. SNF快速开发平台3.0之-界面个性化配置+10种皮肤+7种菜单-Asp.net+MVC4.0+WebAPI+EasyUI+Knockout

    一.个性配置-首页:可以进行拖动保存配置,下次登录时就会按配置的进行加载 二.个人配置页面 7种菜单用户可自定义配置,和预览效果 10种皮肤自定义配置,和预览效果 皮肤和菜单可以随意组合-部分截图: ...

  8. CYQ.Data.Orm.DBFast 新增类介绍(含类的源码及新版本配置工具源码)

    前言: 以下功能在国庆期就完成并提前发布了,但到今天才有时间写文介绍,主要是国庆后还是选择就职了,悲催的是上班的地方全公司都能上网,唯独开发部竟不让上网,是个局域网. 也不是全不能上,房间里有三台能上 ...

  9. CYQ.Data V5 从入门到放弃ORM系列:框架的优势

    前言: 框架开源后,学习使用的人越来越多了,所以我也更加积极的用代码回应了. 在框架完成了:数据库读写分离功能 和 分布式缓存功能 后: 经过三天三夜的不眠不休,终于完成框架第三个重量级的功能:自动化 ...

随机推荐

  1. scp 从远程服务器上一下载文件

    scp -P202 xx3.x6.xx.xx:/usr/local/zookeeper-.zip /tmp #指定远程服务器的端口和远程服务器的目标文件 ,最后指定要下载到本的地目录 也可以从远程服务 ...

  2. postgresql 设置只读用户

    postgresql 设置只读用户 ` CREATE USER readonly WITH ENCRYPTED PASSWORD 'ropass'; alter user readonly set d ...

  3. 【leetcode】Pascal's Triangle

    题目简述: Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5 ...

  4. [Spring] AOP, Aspect实例解析

    最近要用到切面来统一处理日志记录,写了个小实例练了练手: 具体实现类: public interface PersonServer { public void save(String name); p ...

  5. 前端试题本(HTML+CSS篇)

    CS1. 下面关于IE.FF下面CSS的解释区别描述正确的有?(不定项)CS2请选出结构正确的选项CS3.下面哪些是HTML5 新增的表单元素?CS4在使用table表现数据时,有时候表现出来的会比自 ...

  6. 信鸽推送 .NET (C#) 服务端 SDK rest api 调用库(v1.2)

    信鸽推送 .NET  服务端 SDK rest api 调用库-介绍 该版本是基于信鸽推送v2版本的时候封装的,先拿出来与大家分享,封装还还凑合,不依赖其他http调用件,唯一依赖json序列化dll ...

  7. 忘记XP密码的解决方案

    仅供教学与研究用,后果自负! !! USE AT YOUR OWN RISK !! !! ONLY FOR EDUCATIONAL PURPOSE !! 介绍 获取SYSTEM权限.测试通过. 进入G ...

  8. Drools API的使用学习

    Drools API的使用学习在 Drools 当中,规则的编译与运行要通过 Drools 提供的各种 API 来实现,这些 API 总体来讲可以分为三类:规则编译.规则收集和规则的执行.完成这些工作 ...

  9. [转载] SSH入门学习基础教程

    在Linux系统中,OpenSSH是目前最流行的远程系统登录与文件传输应用,也是传统Telenet.FTP和R系列等网络应用的换代产品.其 中,ssh(Secure Shell)可以替代telnet. ...

  10. jQuery中的事件绑定方法

    在jQuery中,事件绑定方法大致有四种:bind(),live(), delegate(),和on(). 那么在工作中应该如何选择呢?首先要了解四种方法的区别和各自的特点. 在了解这些之前,首先要知 ...