`
bozch
  • 浏览: 461624 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Jquery easyui之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 = $("<div></div>");
if(formId && $.trim(formId) != ""){
form.attr("id",formId);
}
var tb=$("<div class=\"datagrid-searchbar\"></div>").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<forms.length;i++){
var searform = forms[i];
var type = searform.type;
if(type == "start_end"){//自己另外给定义了时间开始结束的类型,即比editors又多了一种。

var div = $("<div class=\"datagrid-searchform2\"></div>");
var dl = null;
var dt = $("<dt></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 = $("<dl><dd>"+startConfig.label+":</dd></dl>");

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);
}
$("<span>&nbsp;"+endConfig.label+"&nbsp;</span>").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 = $("<div class=\"datagrid-searchform\"></div>");
var dl = $("<dl><dd>"+label+":</dd></dl>");
var dt = $("<dt></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 = $("<a href=\"javascript:void(0)\" style=\"\">查询</a>");
var submitArea = $("<div class=\"datagrid-searchform\" align=\"center\"></div>");


//get the value in the search form
function getSearchValue(){
var search_query_data = {};
for(var i=0;i<searchEditors.length;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 版权所有,转载请说明出处*/

分享到:
评论

相关推荐

    jquery easyui datagrid demo

    jQuery EasyUI 是一个基于 jQuery 的前端框架,它封装了一系列的 jQuery 插件,为开发者提供了构建用户界面的简便方法。这个“jquery easyui datagrid demo”包含了一些关于如何使用 jQuery EasyUI 中 Datagrid 组件...

    jquery easyui 帮助文档

    jQuery EasyUI 是一个基于 jQuery 的前端框架,它简化了网页用户界面开发,提供了丰富的组件和功能。这个“jQuery EasyUI 帮助文档”包含了全面的API参考和使用指南,对于开发者来说是极具价值的资源。 jQuery ...

    jqueryEasyUI

    **jQuery EasyUI 知识点详解** jQuery EasyUI 是一个基于 jQuery 的前端框架,它提供了一系列的 UI 组件,使得开发者能够快速构建出美观且功能丰富的 Web 应用程序。这个框架大大简化了网页界面的设计工作,使得...

    jQuery EasyUI的api

    - **EasyUI 组件**: EasyUI 将jQuery的功能进一步扩展,提供了如`datagrid`(数据网格)、`panel`(面板)、`dialog`(对话框)等丰富的UI组件。 2. **组件的使用**: - **初始化组件**: 使用`$(selector)....

    初试JqueryEasyUI(附Demo)

    **jQuery EasyUI 知识点详解** jQuery EasyUI 是一个基于 jQuery 的前端框架,它提供了一系列的 UI 组件,使得开发者能够快速构建出美观且功能丰富的 Web 应用程序。这个初试 Jquery EasyUI 的 Demo 旨在帮助新手...

    Jquery EasyUI 日历Demo

    JQuery EasyUI 是一个基于 jQuery 的轻量级前端框架,它提供了一系列的 UI 组件,如对话框、表格、树形菜单、按钮等,用于快速构建用户界面。在这个"Jquery EasyUI 日历Demo"中,我们将探讨如何利用 EasyUI 的日历...

    jQuery EasyUI 1.5.1 离线中文API文档 含完整开发工具包+皮肤+扩展+演示+各版权API chm 最新 最全 纯净

    4. **扩展**:除了基本的组件外,jQuery EasyUI还提供了许多扩展插件,如日期选择器、时间选择器、树形表格等,这些扩展增强了框架的功能,使开发者能够创建更复杂的用户交互体验。 5. **演示**:包含的演示示例...

    jquery easyui pagination 分页插件扩展

    在本案例中,我们关注的是"jquery easyui pagination 分页插件扩展",这是一个用于增强默认分页功能的自定义插件。 分页在数据展示中扮演着重要的角色,特别是在处理大量数据时,它能让用户按需加载和浏览数据,...

    jQuery EasyUI v1.3.5官方API中文版

    jQuery EasyUI 是一款非常棒的WEB前端UI框架,很多朋友都在找jQuery EasyUI API 中文文档,本次给大家提供的就是jQuery EasyUI v1.3.5官方API中文版,有需要的拿去用吧

    jquery easyUI 实现动态生成多条件查询功能

    谁在jquery easyUI 下做过动态生成多条件查询功能,动态添加一行(一个条件):参数名(多个字段名)、关系符(&gt;、&lt;、&gt;=、、=)、比较值(input)。大体就这样,点击“添加条件”,生成上面描述的一行,这个在jquery...

    jQuery EasyUI v1.10.0.zip

    9. **plugins**:这个目录包含了jQuery EasyUI的扩展插件,这些插件提供了更多特定的功能和组件,可以按需使用。 10. **src**:源代码目录,开发者如果需要对EasyUI进行自定义或二次开发,可以参考这里的源码。 ...

    jQuery EasyUI 1.5.1 版 API 中文版

    jQuery EasyUI 是一个基于 jQuery 的前端框架,它简化了网页用户界面开发,提供了一系列易于使用的组件,如对话框、表格、菜单、按钮等。版本 1.5.1 是一个重要的更新,它不仅包含了之前版本的所有功能,还进行了...

    Jquery EasyUI 页面框架Demo

    Jquery EasyUI 是一个基于jQuery的前端开发框架,它提供了丰富的UI组件,使得开发者能够快速构建出美观且功能齐全的Web应用界面。这个"Jquery EasyUI 页面框架Demo"包含了四个示例,将帮助我们更好地理解和运用...

    jQuery EasyUI 1.9.4 chm文档

    针对jQuery EasyUI的1.9.0的在线帮助文档进行整理,生成chm文件,便于开发时或者离线对easyi控件的属性、文法、事件等内容的查看。

    ssm+jqueryeasyui案例

    jQuery EasyUI则是一个基于jQuery的UI库,提供了丰富的组件和易于使用的API,用于快速构建现代、响应式的Web应用界面。 在这个"ssm+jqueryeasyui案例"中,我们可以学习如何将这三者结合,构建出功能完善的Web应用。...

    SSH+Jquery easyUI后台管理系统

    SSH+jQuery EasyUI后台管理系统是一种基于Struts2(S)、Spring(S)和Hibernate(H)三大开源框架的Web应用程序开发模式,结合jQuery EasyUI前端框架,构建出高效、简洁且具有现代感的后台管理界面。这个系统设计的...

    jQuery EasyUI 参考资源合集

    jQuery EasyUI 是一个基于 jQuery 的前端开发框架,它简化了网页界面的构建,提供了一系列的 UI 组件,如对话框、表格、下拉菜单、树形结构等。这个参考资源合集包含了三个重要的文档,分别为 jQuery EasyUI 1.2 API...

    jQuery EasyUI编辑DataGrid用combobox实现多级联动

    在jQuery EasyUI中,DataGrid是一种常用的表格展示控件,它可以与各种编辑器结合使用,如combobox(下拉框)来实现更丰富的交互功能。本文主要探讨的是如何利用jQuery EasyUI的DataGrid和combobox组件实现多级联动的...

    jQuery easyui 全套文件

    jQuery EasyUI 是一个基于 jQuery 的前端开发框架,它简化了网页界面的构建,提供了一系列易于使用的组件和插件,使得开发者能够快速构建出美观、功能丰富的用户界面。这个压缩包包含的是 jQuery EasyUI 的全套文件...

    扩展 jQuery EasyUI Datagrid 数据行鼠标悬停离开事件完整版Demo下载

    jQuery EasyUI Datagrid 用户列表鼠标悬停/离开数据行时显示人员头像(onMouseOver/onMouseOut) Demo 扩展 jQuery EasyUI Datagrid 数据行鼠标悬停离开事件,源码奉献!!!

Global site tag (gtag.js) - Google Analytics