easyui Basic CRUD Application 试水

    • 前言
    • 环境搭建
      • 离线版
      • 在线版
    • 前端代码
      • 完整代码
      • 经典解析
    • 数据库
      • 建表语句
      • 预先分配一些值
    • 后端代码
      • 数据库小扳手
      • get_usersphp
      • save_userphp
      • update_userphp
        • destroy_userphp
    • 效果演示
      • 罗列User
      • 新增User
      • 修改User信息
      • 删除User
    • 总结

前言

EasyUI 一款简洁而又不简单的前端框架,近来因为要做一些管理信息处理,为了偷懒写那么多前端代码,就尝试着使用easyui做了一下适配。因为是基于JQuery实现,所以兼容性是没得说啦,其他的除了界面略显粗糙,还都挺不错的。

环境搭建

要想使用easyui,就必须下载相关的依赖。因为是基于JQuery,所以必不可少需要JQuery的支持。通常来讲,可以使用离线版和在线版两种方式来引入相关文件。接下来简单的叙述一下。

离线版

使用离线版的话,需要将下载好的javascript文件引入到我们的项目中来。该文件可以在http://www.jeasyui.com/download/index.php 处下载。下载完后我们需要的文件就是下面这张图上展示的了。

到时候需要的时候,在HTML代码中进行引入就可以了。

在线版

在线版的话就方便多了,但是缺点就是当网速不给力的时候,页面加载的会非常的缓慢,导致用户体验的直线下降。

所以一般来讲,实际项目中都会先把依赖的文件保存到服务器的特定目录中,方便代码的加载和调用。最大程度上给用户更好的使用体验。

因为我这次的实验比较简单,家里的网速还挺不错。为了让项目目录更加精简,我就用一下在线版的好了。具体来讲就是在相关的HTML页面中添加上这段代码。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Basic CRUD Application - jQuery EasyUI CRUD Demo</title>
    <link rel="stylesheet" type="text/css" href="http://www.jeasyui.com/easyui/themes/default/easyui.css">
    <link rel="stylesheet" type="text/css" href="http://www.jeasyui.com/easyui/themes/icon.css">
    <link rel="stylesheet" type="text/css" href="http://www.jeasyui.com/easyui/themes/color.css">
    <link rel="stylesheet" type="text/css" href="http://www.jeasyui.com/easyui/demo/demo.css">
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.6.min.js"></script>
    <script type="text/javascript" src="http://www.jeasyui.com/easyui/jquery.easyui.min.js"></script>
</head>

前端代码

前端部分代码比较长,但是仔细阅读以下,不难发现流程还是很清晰的。

完整代码

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Basic CRUD Application - jQuery EasyUI CRUD Demo</title>
    <link rel="stylesheet" type="text/css" href="http://www.jeasyui.com/easyui/themes/default/easyui.css">
    <link rel="stylesheet" type="text/css" href="http://www.jeasyui.com/easyui/themes/icon.css">
    <link rel="stylesheet" type="text/css" href="http://www.jeasyui.com/easyui/themes/color.css">
    <link rel="stylesheet" type="text/css" href="http://www.jeasyui.com/easyui/demo/demo.css">
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.6.min.js"></script>
    <script type="text/javascript" src="http://www.jeasyui.com/easyui/jquery.easyui.min.js"></script>
</head>
<body>
<h2>Basic CRUD Application</h2>
<p>Click the buttons on datagrid toolbar to do crud actions.</p>

<table id="dg" title="My Users" class="easyui-datagrid" style="width:700px;height:250px"
       url="get_users.php"
       toolbar="#toolbar" pagination="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>
    </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"
     closed="true" buttons="#dlg-buttons">
    <form id="fm" method="post" novalidate style="margin:0;padding:20px 50px">
        <div style="margin-bottom:20px;font-size:14px;border-bottom:1px solid #ccc">User Information</div>
        <div style="margin-bottom:10px">
            <input name="firstname" class="easyui-textbox" required="true" label="First Name:" style="width:100%">
        </div>
        <div style="margin-bottom:10px">
            <input name="lastname" class="easyui-textbox" required="true" label="Last Name:" style="width:100%">
        </div>
        <div style="margin-bottom:10px">
            <input name="phone" class="easyui-textbox" required="true" label="Phone:" style="width:100%">
        </div>
        <div style="margin-bottom:10px">
            <input name="email" class="easyui-textbox" required="true" validType="email" label="Email:" style="width:100%">
        </div>
    </form>
</div>
<div id="dlg-buttons">
    <a href="javascript:void(0)" class="easyui-linkbutton c6" iconCls="icon-ok" onclick="saveUser()" style="width:90px">Save</a>
    <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-cancel" onclick="javascript:$('#dlg').dialog('close')" style="width:90px">Cancel</a>
</div>
<script type="text/javascript">
    var url;
    function newUser(){
        $('#dlg').dialog('open').dialog('center').dialog('setTitle','New User');
        $('#fm').form('clear');
        url = 'save_user.php';
    }
    function editUser(){
        var row = $('#dg').datagrid('getSelected');
        if (row){
            $('#dlg').dialog('open').dialog('center').dialog('setTitle','Edit User');
            $('#fm').form('load',row);
            url = 'update_user.php?id='+row.id;
        }
    }
    function saveUser(){
        $('#fm').form('submit',{
            url: url,
            onSubmit: function(){
                return $(this).form('validate');
            },
            success: function(result){
                var result = eval('('+result+')');
                alert(result.success);
                alert(result.errorMsg);
                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 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('destroy_user.php',{id:row.id},function(result){
//                        alert('asdsasasd'+result);
                        if (result.success){
                            $('#dg').datagrid('reload');    // reload the user data
                        } else {
                            $.messager.show({    // show error message
                                title: 'Error',
                                msg: result.errorMsg
                            });
                        }
                    },'json');
                }
            });
        }
    }
</script>
</body>
</html>

经典解析

HTML页面中使用了很多easyui中定制的类型。这里不过多的阐述了。但是页面中使用到的JavaScript代码可谓是非常的经典了。

秉承“一次只做一件事”的理念,对应页面上的超链接这里实现了相应的处理函数,以供调用。逻辑非常的清晰。

尤其是对于新建和修改段代码更值得仔细品读。

数据库

建表语句

DROP TABLE IF EXISTS `easyui_application`;
CREATE TABLE `easyui_application` (
  `id` int(100) NOT NULL AUTO_INCREMENT,
  `firstname` varchar(32) NOT NULL,
  `lastname` varchar(32) NOT NULL,
  `phone` int(11) NOT NULL,
  `email` varchar(64) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;

预先分配一些值

INSERT INTO `easyui_application` VALUES ('1', 'tom', 'Boris', '123456789', '1234567890@tom.com');
INSERT INTO `easyui_application` VALUES ('2', 'jack', 'James', '123456799', '1236765342@jack.com');
INSERT INTO `easyui_application` VALUES ('3', 'Herry', 'Jackson', '634343423', 'esdfsfdsds@herry.com');
INSERT INTO `easyui_application` VALUES ('4', 'Dsad', 'Hankson', '122344546', 'dasdsaudas@dasd.com');
INSERT INTO `easyui_application` VALUES ('5', 'Mark', 'Sinoberg', '232323722', 'sadbsadsasaid@mark.com');
INSERT INTO `easyui_application` VALUES ('6', 'pu', 'guo', '123456789', '1064319632@qq.com');
INSERT INTO `easyui_application` VALUES ('7', 'pupu', 'guo', '123456787', '13981283326@qq.com');

后端代码

PHP在web开发中有先天优势,所以这里仍旧选择使用PHP作为后端处理语言,当然JavaWeb或者Python做后端处理也都是可以的。

数据库这块为了配合PHP的使用,选择了MySQL数据库。下面针对前端特定功能实现特定的后端处理代码。

数据库小扳手

之前有种预感,要经常性的接触数据库编程,所以为了偷懒,写了个通俗易懂的数据库小扳手,来处理常用的数据库操作。没想到这么快就派上了用场,如果有需要的话,可以在我的 http://blog.csdn.net/marksinoberg/article/details/54650032
这篇文章中找到源码,这里不再阐述。

get_users.php

<?php
/**
 * Created by PhpStorm.
 * User: ${郭璞}
 * Date: 2017/2/2
 * Time: 10:08
 * Description: get_users. 返回值记得要为JSON格式
 */

include "db.php";

$querier = new QueryRunner();

$resultset = $querier->select("select * from easyui_application");

echo json_encode($resultset);

save_user.php

<?php
/**
 * Created by PhpStorm.
 * User: ${郭璞}
 * Date: 2017/2/2
 * Time: 11:39
 * Description:
 */

$firstname = $_REQUEST['firstname'];
$lastname = $_REQUEST['lastname'];
$phone = $_REQUEST['phone'];
$email = $_REQUEST['email'];

if($firstname&&$lastname&&$phone&&$email) {
    include "db.php";
    $querier = new QueryRunner();
    $params = array($firstname, $lastname, $phone, $email);
    $isInserted = $querier->insert("insert into easyui_application(firstname, lastname, phone, email) values(?, ?, ?, ?)", $params);
    if($isInserted) {
        $result = array("success"=>"saved success!");
        echo json_encode($result);
    }else{
        $result = array("errorMsg"=>"saved Success!");
        echo json_encode($result);
    }
}else{
    $result = array("errorMsg"=>"Field should be cpmpleted!");
    echo json_encode($result);
}

update_user.php

<?php
/**
 * Created by PhpStorm.
 * User: ${郭璞}
 * Date: 2017/2/2
 * Time: 11:39
 * Description:
 */
$id = $_GET['id'];
$firstname = $_REQUEST['firstname'];
$lastname = $_REQUEST['lastname'];
$phone = $_REQUEST['phone'];
$email = $_REQUEST['email'];

if($firstname&&$lastname&&$phone&&$email) {
    include "db.php";
    $querier = new QueryRunner();
    $params = array($firstname, $lastname, $phone, $email, $id);
    $isInserted = $querier->insert("update easyui_application set firstname = ?, lastname=?, phone=?, email=? WHERE id=?", $params);
    if($isInserted) {
        $result = array("success"=>"updated success!");
        echo json_encode($result);
    }else{
        $result = array("errorMsg"=>"updated Success!");
        echo json_encode($result);
    }
}else{
    $result = array("errorMsg"=>"Field should be cpmpleted!");
    echo json_encode($result);
}

destroy_user.php

<?php
/**
 * Created by PhpStorm.
 * User: ${郭璞}
 * Date: 2017/2/2
 * Time: 11:39
 * Description:
 */
include 'db.php';

$querier = new QueryRunner();

$params = array(
    $_POST['id'],
);
$isDeleted = $querier ->delete("delete from easyui_application where ID=?", $params);

if($isDeleted){
    $result = array("success"=>"destroy success!");
    echo json_encode($result);
}else{
    $result = array("errorMsg"=>"Destroy Failed!");
    echo json_encode($result);
}

至此,前后端所需代码全部搞定了。下面就一起来看看实现的效果吧。

效果演示

罗列User

打开与之对应的网址即可看到前端从数据库中取得的所有的值了。可以使用组件自带的分页处理来实现灵活的分页效果,是不是很赞呢?

新增User

下面进行添加用户的演示。

新增用户的时候可以按照需求灵活地添加自己的验证规则,很灵活!

修改User信息

修改用户信息的时候最讨厌的就是重新输入一遍信息了,不过还好easyui帮我们想到了这点,我们只需要修改需要修改的地方就行了,很省心!!!

删除User

下面继续拧删除用户的演示。

删除的操作是先选中要删除的行,然后点击removeUser按钮,来明确要删除哪一行记录。

总结

最后来回顾一下,本次试验主要是使用了easyui的组件来帮助后端开发人员减少前端代码的编写,高效的处理业务流程。

在线版以及离线版都是可以的,按需使用即可。

后端处理不固定,有很多语言都可以实现后端处理,Java, Python,C, C#,ASP等都是可以的。

前后端代码耦合的时候非常的重要,接口之间的处理也是如此。最后对于代码的复用性争取能重构到最大限度。

命名规范什么的也不过多的说了,老生常谈的问题。不是不重要,而是非常的重要。

好了,先写这么一个,以后对于用得到的easyui组件再进行描述吧。

时间: 2024-10-03 00:04:06

easyui Basic CRUD Application 试水的相关文章

解析用博客试水SEO市场是否可行

昨天照例去了松哥的博客转了一圈,仍然是把里面的推荐文章看了一遍,其中一篇文章说的是卢老师对于三年博客生活的总结,有辛酸,有收获,当然更多的是希冀.当然如今的博客已经不再像2009年左右那么热了,不过仍然有很多朋友通过博客去试水SEO市场,以地名+SEO的博客形式去赢得一定的网络订单,这样的方式固然可行,可是现在博客的经营难度大家都知道,在失去社会广泛关注的情况下,很多博主不再更新自己的博客,而没有了观众的博客是很难在搜索流量上有一番作为的,除非你像卢松松那样,对于SEO或是网络营销有自己真正独特

吉利试水电子商务结合SNS大获全胜

          12月某一天,惠儿像往日一样进入淘江湖,准备看下要买的羽绒服其他淘友怎么评价分享的.不过当她进入个人中心,查看好友"新鲜事"时,进入眼帘的是好友小白转发的叽歪活动"'团购熊猫汽车,立省万元'转发送熊猫车模和288元红包",而这个叽歪的始发者是"全球鹰"明星店铺.惠儿的第一反应是,淘宝开始卖车了,太不可思议了.接着欣喜的是,一直跟老公商榷要买的"熊猫车"竟然可淘宝团购啦,还立省万元.在转发参加活动的同时,惠儿

试水移动医疗,英特尔要用大数据追踪疾病

摘要: Maker Voice是为关注新硬件的朋友们准备的一个栏目,初期的形态是每天一篇文章,梳理总结一天下来新硬件行业的精华内容,可能是有意思的产品,也可能是引人思考的观点,目标是让 Maker Voice是为关注新硬件的朋友们准备的一个栏目,初期的形态是每天一篇文章,梳理总结一天下来新硬件行业的精华内容,可能是有意思的产品,也可能是引人思考的观点,目标是让朋友们能用最短时间在这里遍览真正值得关注的内容.So,enjoy! 试水移动医疗,英特尔要用大数据追踪疾病 周三,英特尔宣布将同 Mich

商业化试水,Prisma能否重创奇迹?

Prisma正在向2B领域转型,推出了一个新的网站Prismalabs.ai. 这将是Prisma一次迈向商业化道路的试水. 一直以来Prisma都非常神秘并无公开的融资信息,也没有被任何的巨头收购.外界对于这家明星的公司到底如何盈利一直有着很大的疑问. 这次Prisma在2B市场上的尝试,所展现出的技术和商业化思维到底成色几何? 成功与延伸 图片编辑软件多不胜数,Prisma却属于世界范围内现象级的应用,这是空前的成功. 最初,Prisma 创始人Moissenkov 的想法是使用" 多层卷积

试水教练个性收费 商业化在线健身是否靠谱

如今,随便点击搜索,在线健身的视频就可以搜集到很多.如果还要做一个专门的在线健身教学视频网站,是否有些多余,下面就这个问题,我们一起来研究一下. 去年开始,杜希萌与几位同伴一起,准备在在线健身视频上尝试新机会,成立了一家叫"我开始"的在线健身网站,并获得了投资人的一笔种子基金.他的做法是,先充当优化者,即整合在线健身的视频资源优化出方案,然后再成为原创者,集合专业健身教练拍摄原创内容.至于盈利,目前相对清晰的路径是体育用品商广告,以后则为用户打造收费的个性化健身方案. 商业化在线健身,

试水Nutanix超融合架构,中通信息经验分享

今年8月中通信息服务有限公司采用Nutanix超融合架构对其云数据中心进行了转型升级,这无疑是一个有益的尝试. 选准切入点 中通信息的业务覆盖互联网语音增值.电信代营代维.通信设备与器材销售.通信工程建设与系统集成等,形成了以增值业务.通信维护.物流配送三大业务为核心的整体架构.2013年,中通信息尝试推出了中通云公有云平台.然而,中通信息很快意识到在全新的云时代,看清市场形态,找准自身优势,快速落实部署尤为重要. 中通信息数据中心运营部经理黄志清指出, "云计算是一个涉及面非常广的领域,技术更

为了更有效率地偷钱,Android root木马开始试水短信扣费诈骗

本文讲的是为了更有效率地偷钱,Android root木马开始试水短信扣费诈骗, 自2006年9月以来,我们就一直在监控Google Play商店有关Ztorg木马的各种新变异版本 ,到目前为止,我们已经发现了几十个新的Ztorg木马的变异程序.所有这些都是恶意程序无一例外都是利用漏洞在受感染的设备上获得root权限. 不过,在2017年5月下旬以来,在我们捕获的Ztorg木马的变异程序中,却发现它们都没有使用设备的root权限.通过对Google Play上的两个恶意应用程序进行研究发现,它们

Json.Net6.0入门学习试水篇

原文:Json.Net6.0入门学习试水篇 前言 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.简单地说,JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从 Web 客户机传递给服务器端程序.这个字符串看起来有点儿古怪,但是 JavaScript 很容易解释它,而且 JSON 可以表示比"名称 / 值对"更复杂的结构.例如,可以表示数组和复杂的

“笔记书”试水图书市场:图书笔记本融为一体

本报讯(记者 姜小玲)互联网时代,面对电子书显现出日渐走高的势头,传统纸质图书如何谋求发展,成为摆在出版人面前的一道难题.近日在图书市场上悄然出现的"笔记书",以"好玩"."好用"和"互动性"受到读者欢迎.不过,这一新尝试也引出争议,有人质疑,定价偏高的"笔记书"究竟卖的是书还是笔记本?这一创新是传统图书的"破茧之作"还是仅仅在玩概念? 对图书和笔记本"双重颠覆" 由