热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

Jqueryeasyui之datagird查询框扩展

三个问题来了,我们进行查询的时候,会遇到分页查询的问题。这要求我们在每次进行查询的时候

今天整理一下,本人对jquery easyui中的datagrid查询框的扩展的思路。

1、首先、在进行扩展的时候查询框封装的是一个表单,此表单中需要包含jquery eaysui的自定义的表单,如combobox、datebox、datetimebox等等。那么就需要定义一系列的jquery easyui的表单组件数组。在看过easyui源码之后,发现在datagrid中已经定义了这么一个数组,存储了大部分的表单组件,即为editors。不错哦,这个就用上啦!

2、接着、就要考虑如何扩展查询框这个属性啦,这很简单,只要在定义datagrid的时候,多添加一个属性就好了,此处我定义了searchbar,是一个数组。这个数组定义的方式和可编辑表格中的editor类似。可以参考可编辑表格的实例。

{
type:'text',
name: 'Names',
label:'人员姓名'
}

 

其中、type即为表单组件的类型,上面定义的是文本框。具体有那些类型可以参考editors。当然需要的话可以自己扩展(如可以定义一个又开始和结束时间的查询控件)。

为了以后能够对其进行扩展,在searchbar中定义了另一个属性forms来存储查询表单中的内容。

3、第三个问题来了,我们进行查询的时候,会遇到分页查询的问题。这要求我们在每次进行查询的时候,能够在每次查询的时候把查询参数也一起传到后台,怎样才能实现呢?细心的你也许已经发现,在datagrid中,提供了queryParams这个参数。这个在我的 Jquery easyui之控件参数传递(http://bozch.iteye.com/blog/1465951)中提到过。他能够在每次查询的时候将已定义的参数传递到相应的URL地址。我们在单击查询按钮的时候,需要调用datagrid的方法,将表单查询参数集成到queryParams当中,然后传递到URL中,这就是load方法。这将为我们扩展searchbar提供了便利。

4、有了上面几点作为支持,实现查询框的功能已经不在话下了。但是还有一个样式问题,当时这个问题让我很是纠结(当初样式学的很烂,嘻嘻)。这个问题就是如何让查询框能够上下对齐而且自动换行,在这之前就是如何将这些查询组件组装到已有的datagrid中。下面将代码奉上(不知道咋滴,不能用可编辑器插入代码,直接就糊上来啦):

首先是样式:

/* 添加查询框 */
.datagrid-searchbar{
clear:both;
float:left;
margin-bottom:5px;
}


.datagrid-searchform {float: left;width: 260px;margin:0;padding:0;}
.datagrid-searchform dl {float: left;width: 260px;line-height: 25px;color: #565656;margin:0;padding:0;margin-top:6px;}
.datagrid-searchform dd {float: left;width: 100px;text-align: right;margin:0;padding:0;}
.datagrid-searchform dt {float: left;width: 160px;margin:0;padding:0;}

.datagrid-searchform2 {float: left;width: 446px;margin:0;padding:0;}
.datagrid-searchform2 dl {float: left;width: 446px;line-height: 25px;color: #565656;margin:0;padding:0;margin-top:6px;}
.datagrid-searchform2 dd {float: left;width: 113px;text-align: right;margin:0;padding:0;}
.datagrid-searchform2 dt {float: left;width: 333px;margin:0;padding:0;}

.datagrid-searchbar a.l-btn{margin-right:20px;float:right;margin-top:5px;}

 

下面是js代码,分两部分 :

第一部分是来控制datagrid高度的代码,这是由于扩展的searchbar要占用一定的高度。放置代码的具体位置是在wrap.children("div.datagrid-toolbar").outerHeight(true)后面再减去wrap.children("div.datagrid-searchbar").outerHeight(true)即可。

第二部分既是对searchbar的扩展,找到$("div.datagrid-pager",_3ae).remove();然后在前面加上如下代码:

//TODO add the searchbar
$("div.datagrid-searchbar",_3ae).remove();//和pager,toolbar一样,先清理一下。
if(opts.searchbar){//看看是不是已经定义了searchbar
var formId = opts.searchbar.formId;//为了能够便捷的对查询表单的操作,给查询表单定义了id
var form = $("

");
if(formId && $.trim(formId) != ""){
form.attr("id",formId);
}
var tb=$("
").prependTo(_3ae);
var forms = opts.searchbar.forms;//已定义的查询表单内容

//save all editors for get the editor value;
var searchEditors = [];//这是用来存储所有表单控件相关属性的,为了能够最后统一获取查询表单值
form.appendTo(tb);
if(forms){
//show form with specific style
for(var i=0;i var searform = forms[i];
var type = searform.type;
if(type == "start_end"){//自己另外给定义了时间开始结束的类型,即比editors又多了一种。

var div = $("

");
var dl = null;
var dt = $("
");

if(searform.options){

var startCOnfig= searform.options[0];
var endCOnfig= searform.options[1];

var startEditor = opts.editors[startConfig.type];//开始控件
var endEditor = opts.editors[endConfig.type];//结束控件

dl = $("

"+startConfig.label+":
");

if(startEditor && endEditor){
var se = startEditor.init(dt,startConfig.options).attr("name",startConfig.name);
if(startConfig.id && $.trim(startConfig.id) != ""){
se.attr("id",startConfig.id);
}
$(" "+endConfig.label+" ").appendTo(dt);
var ee = endEditor.init(dt,endConfig.options).attr("name",endConfig.name);
if(endConfig.id && $.trim(endConfig.id) != ""){
ee.attr("id",endConfig.id);
}
searchEditors.push({action:startEditor,target:se,name:startConfig.name});
searchEditors.push({action:endEditor,target:ee,name:endConfig.name});
}
}

dt.appendTo(dl);
dl.appendTo(div);
div.appendTo(form);

}else{
var name = searform.name;
var id = searform.id;
var label = searform.label;
var editor=opts.editors[type];
var div = $("

");
var dl = $("
"+label+":
");
var dt = $("
");
if(editor){
var e = editor.init(dt,searform.options).attr("name",name);
if(id && $.trim(id) != ""){
e.attr("id",id);
}
searchEditors.push({action:editor,target:e,name:name});

}
dt.appendTo(dl);
dl.appendTo(div);
div.appendTo(form);
}

}
var submitButton = $("查询");
var submitArea = $("

");


//get the value in the search form
function getSearchValue(){
var search_query_data = {};
for(var i=0;i var getEditor = searchEditors[i];
var action = getEditor.action;
var target = getEditor.target;
var name = getEditor.name;
var val = action.getValue(target);
if(val&&val != ""){
$.data(search_query_data,name,val);//将所有的查询表单的值封装到search_query_data中。
}

}
return search_query_data;
}

submitButton.linkbutton({plain:false,iconCls:'icon-search'}).click(function(){
if(form.form('validate')){//如果有表单验证
opts.onSearcBefore.call(_3ae,getSearchValue());//定义了一个查询时间,后来发现在treegrid中能用上
$(_3ad).datagrid("load",getSearchValue());
}
});
submitButton.appendTo(form);
}
}

上述扩展代码稍微有点乱。如有更好的建议,留言大家一起讨论。

/*http://www.jeestudio.com 版权所有,转载请说明出处*/


推荐阅读
  • 三星W799在2011年的表现堪称经典,以其独特的双屏设计和强大的功能引领了双模手机的潮流。本文详细介绍其配置、功能及锁屏设置。 ... [详细]
  • 本文介绍如何通过注册表编辑器自定义和优化Windows文件右键菜单,包括删除不需要的菜单项、添加绿色版或非安装版软件以及将特定应用程序(如Sublime Text)添加到右键菜单中。 ... [详细]
  • 帝国CMS多图上传插件详解及使用指南
    本文介绍了一款用于帝国CMS的多图上传插件,该插件通过Flash技术实现批量图片上传功能,显著提升了多图上传效率。文章详细说明了插件的安装、配置和使用方法。 ... [详细]
  • 深入理解Shell脚本编程
    本文详细介绍了Shell脚本编程的基础概念、语法结构及其在操作系统中的应用。通过具体的示例代码,帮助读者掌握如何编写和执行Shell脚本。 ... [详细]
  • GIMP 2.99.2 发布:UI 采用 GTK3 实现、原生支持高分屏和 Wayland
    开源项目评选最后一周,手里的5票再不用就没用了https:www.oschina.netprojecttop_cn_2020GIMP2.99.2已发布,同时这也标志着GIMP3.0的到来,其中最显著的变化是从GTK2过渡到GTK3工具包。基于 ... [详细]
  • Unity编辑器插件:NGUI资源引用检测工具
    本文介绍了一款基于NGUI的资源引用检测工具,该工具能够帮助开发者快速查找和管理项目中的资源引用。其功能涵盖Atlas/Sprite、字库、UITexture及组件的引用检测,并提供了替换和修复功能。文末提供源码下载链接。 ... [详细]
  • 本文介绍了一段使用jQuery实现的用户注册页面表单验证代码,适用于前端开发人员学习和参考。该示例结合了HTML、CSS和JavaScript,确保用户输入的数据格式正确。 ... [详细]
  • 本文介绍了ArcXML配置文件的分类及其在不同服务中的应用,详细解释了地图配置文件的结构和功能,包括其在Image Service、Feature Service以及ArcMap Server中的使用方法。 ... [详细]
  • 如何使用PyCharm及常用配置详解
    对于一枚pycharm工具的使用新手,正确了解这门工具的配置及其使用,在使用过程中遇到的很多问题也可以迎刃而解,文中有非常详细的介绍, ... [详细]
  • SPSS操作指南:双变量相关性分析的详细步骤
    本教程将详细介绍如何使用IBM SPSS Statistics进行双变量相关性分析。通过实例演示,帮助读者理解变量间的关系及其统计意义。 ... [详细]
  • Python处理Word文档的高效技巧
    本文详细介绍了如何使用Python处理Word文档,涵盖从基础操作到高级功能的各种技巧。我们将探讨如何生成文档、定义样式、提取表格数据以及处理超链接和图片等内容。 ... [详细]
  • 如何在CAD查看器中同时打开并对比两张DWG图纸
    本文将详细介绍如何使用专业的CAD查看软件,如迅捷CAD看图,来同时打开和对比两张DWG格式的CAD图纸。无论是在设计审核还是项目管理中,掌握这一技能都能显著提高工作效率。 ... [详细]
  • 编写了几个500行左右代码的程序,但基本上解决问题还是面向过程的思维,如何从问题中抽象出类,形成类的划分和设计,从而用面向对象的思维解决问题?有这方面的入门好书吗?最好是结合几个具体的案例分析的 ... [详细]
  • Qt QTableView 内嵌控件的实现方法
    本文详细介绍了在 Qt QTableView 中嵌入控件的多种方法,包括使用 QItemDelegate、setIndexWidget 和 setIndexWidget 结合布局管理器。每种方法都有其适用场景和优缺点。 ... [详细]
  • Ulysses Mac v29:革新文本编辑与写作体验
    探索Ulysses Mac v29,这款先进的纯文本编辑器为Mac用户带来了全新的写作和编辑环境。它不仅具备简洁直观的界面,还融合了Markdown等标记语言的最佳特性,支持多种格式导出,并提供强大的组织和同步功能。 ... [详细]
author-avatar
手机用户2502887763
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有