easy ui 零散技巧
0、datagrid无数据样式提示
思路一:css伪类选择器,找到无数据的table通过:empty 样式实现无数据提示(配合::before伪对象实现),想法是美好的,现实是无奈的,如图
easyui datagrid即使无数据时,依然存在一行(行无数据且不可见),:empty方案被放弃。
思路二:区分出空数据的行和只有一条数据的行,对比发现class是否为空(包括treegrid),css代码如下:
.datagrid-view2 .datagrid-btable tbody > tr[class='']::before { position: absolute; content: 'No Data'; display: flex; width: 100%; height: calc(100% - 45px); padding-left: calc(50%); align-items: center; }
效果如下:
汉化:在easyui-lang-zh_CN.js最末加上如下代码即可:
0.1、datagrid无loading式更新数据
// update 方式更新table function updateTable(tb,p) { var mrTb = tb; if (mrTb && mrTb.length) { var opts = mrTb.datagrid('options'), params = { page: opts.pageNumber, rows: opts.pageSize, order: opts.sortOrder, sort: opts.sortName }, idField = opts.idField; if (opts.onBeforeLoad) opts.onBeforeLoad(params); // 合并所以查询条件 if(p) { $.extend(params, p); }else { $.extend(params, opts.queryParams); } // 抓取数据更新table $.post(opts.url, params, function(data) { if (data && data.rows) { var rows = mrTb.datagrid('getRows'), srows = mrTb.datagrid('getSelections').map(function(item) { return item }); var rowLength = rows.length; /* start */ var newLength = data.rows.length; if(rowLength <= newLength) { for(var i=0;i<newLength;i++) { if(i<=rowLength) { mrTb.datagrid('updateRow', {index: i, row: data.rows[i]}); }else { mrTb.datagrid('appendRow', data.rows[i]); } } }else { for(var i=0;i<rowLength;i++) { if(i<=newLength) { mrTb.datagrid('updateRow', {index: i, row: data.rows[i]}); }else { mrTb.datagrid('deleteRow', i); } } } /* end */ srows.map(function(row) { mrTb.datagrid('selectRecord', row[idField]); }); mrTb.datagrid('resize'); } }, 'json'); } }
1、Jquery带上下文查找:
格式:$(selector,context)
例如:$("input",window.document),查找当前文档下的说有input元素,也等价于$("input",null)或者$("input");
$("input",$("div.target")),查找class为“target”的div里的所有input元素;
2、隐藏tab:
$(fucntion(){
var ctab = $('#tabs').tabs('getTab', 'title1').panel('options').tab;
ctab.hide();
});
3、模态dialog,页面有滚动条时,弹出dialog后,隐藏的区域闪烁问题处理:
.window-mask{
height: 100%;
position: fixed;
}
即覆盖原遮蔽层样式的‘position’属性就行(原属性 - position:absolute)
4、分页信息NaN处理
如图:
代码:data-options="singleSelect:true,
nowrap:true,
rownumbers:true,
pagination:true,
pageSize: 5,
pageList:[5]">
当中的pageSize,pageList等记得给个默认值哦,当然像ie这个不友好的浏览器,还是加上默认值比较好。
5、Jquery判断元素显示隐藏:display属性状态值
很多时候,我们都要判断元素当前是否处于显示或隐藏状态。Jquery通过判断元素display属性状态值来实现“判断当前操作元素是否显示还是隐藏”,实现方法主要使用Jquery提供的基本选择器 :visible 或 :hidden方法。
<script type="text/javascript">
function checkStatus(){
if($('.test').is(':visible')){
alert("注意:'.test'被隐藏了!");
}else{
alert("'.test'显示,能看见');
}
//用基本选择器 :hidden 也行
// if($('.test').is(':hidden')){
// alert("'.test'显示,能看见');
// }else{
// alert("注意:'.test'被隐藏了!");
// }
}
</script>
6、datagrid 自动换行:
<table class="easyui-datagrid"
data-options="url:'datagrid_data2.json',
fitColumns:true,
nowrap:false,
autoRowHeight:true">
记住是三个属性同时具备哦,因为啥?(如若不加这三个,范二的IE会让你痛不欲生)还是兼容性问题啦O(∩_∩)O
7、confirm确认框去掉【关闭】等按钮
$.messager.confirm({
title:'提示',
msg:'提示的内容...',
closable:false, // 关闭按钮
collapsible:false, // 收缩按钮
minimizable:false,
maximizable:false,
fn:function(r){
}
});
8、datagrid 加载数据后、渲染前变更数据
loader:如何从远程服务器加载数据
<table class="easyui-datagrid" data-options="url:'datagrid_data1.json',success:process, loader:function(param,success,error){ var that = $(this); var opts = that.datagrid('options'); if (!opts.url) { return false; } $.ajax({ type : 'POST', url : opts.url, data : param, dataType : 'json', success : function(data){//process 是自定义的数据处理方法 if(opts.success) try{ opts.success(data); }catch(e){} success(data); }, error : error }); }">
... ...
<script type="text/javascript">
function process(data){
if(data && data.rows){
$.each(data.rows,function(index,item){
item.xxx = '***';//修改相关属性
... ...
});
}
}
</script>
9、给时间框控件扩展一个清除的按钮
/** * 给时间框控件扩展一个清除的按钮 */ $.fn.datebox.defaults.cleanText = '清空'; (function ($) { var buttons = $.extend([], $.fn.datebox.defaults.buttons); buttons.splice(1, 0, { text: function (target) { return $(target).datebox("options").cleanText }, handler: function (target) { $(target).datebox("setValue", ""); $(target).datebox("hidePanel"); } }); $.extend($.fn.datebox.defaults, { buttons: buttons }); })(jQuery)
10、datagrid 分页自动选中
在easyui datagrid设置
idField:"主键字段名" ,你会发现选中状态就会保持得住,不用做任何编码。
11、datagrid fitColumns:true 时,表格小于指定宽度取消自适应
onResize: function(width,height){ var cNames = $("#tb").datagrid('getColumnFields');/* 所有的头列名 */ $.each(cNames,function(index,item){
/* 设置列属性fixed:true,则fitColumns:true失效 */ var cOptions = $("#tb").datagrid('getColumnOption',item); if(width - 600 < 0) cOptions.fixed = true; else cOptions.fixed = false; }); $("#tb").datagrid('fitColumns'); }
另一种场景:
onLoadSuccess:function(data){ //console.log($(this).datagrid('')); var cNames = $("#tb").datagrid('getColumnFields'); $.each(cNames,function(index,item){ var cOptions = $("#tb").datagrid('getColumnOption',item);
if(cNames.length<8){// 自适应 cOptions.auto = false; cOptions.width = 10;
delete cOptions.fixed;
}else{
cOptions.auto = true;
cOptions.fixed = true;
delete cOptions.width;
} }); $("#tb").datagrid('fitColumns'); }
12、datagrid getChecked,选择了多行结果只返回一条数据
a: idField属性设置不对,如设置成了一个不存在的属性
13、datagrid pagination,按钮控制定义
分页控件布局定义。(该属性值自1.3.5版开始可用)
布局选项可以包含一个或多个值:
1)
list:页面显示条数列表。
2) sep:页面按钮分割线。
3) first:首页按钮。
4) prev:上一页按钮。
5)
next:下一页按钮。
6) last:尾页按钮。
7) refresh:刷新按钮。
8) manual:手工输入当前页的输入框。
9)
links:页面数链接。
示例代码:
$('#pp').pagination({
layout:['first','links','last']
});
14、tree,叶子节点显示为目录问题
data: [{
"id":"0",
"text":"功能权限",
"children":[
{"id":"1","text":"首页","children":[],"state":"open"},
{"id":"1","text":"导航","children":[],"state":"close"}
]
}]
叶子节点带state属性时,会导致叶子节点显示为目录
15、表格前端排序
function sortTable(tb){ var opts = tb.datagrid('options'), sortName = opts.sortName, sortOrder = opts.sortOrder, rows = tb.datagrid('getRows'), fns = { desc: desc, asc: asc }, fmts = {}; opts.columns[0].map(function(column){ fmts[column.field] = column.formatter; }); if(sortName){ var sortRows = rows.map(function(row,index){ var jrow = $.extend({},row); if(fmts[sortName]) { jrow['_'+sortName+'_'] = $('<div>'+fmts[sortName](jrow[sortName],jrow,index)+'</div>').text(); }else{ jrow['_'+sortName+'_'] = row[sortName]; } return jrow; }); sortRows = sortRows.sort(fns[sortOrder]); sortRows.map(function(row,idx){ tb.datagrid('updateRow',{index: idx,row: row}); }); } function desc(a,b){ var val1 = a['_'+sortName+'_']||'',val2 = b['_'+sortName+'_']||''; if(val1.toString().toLowerCase() > val2.toString().toLowerCase()){ return -1; }else{ return 1; //按编码从大到小排列 } } function asc(a,b){ var val1 = a['_'+sortName+'_']||'',val2 = b['_'+sortName+'_']||''; if(val1.toString().toLowerCase() < val2.toString().toLowerCase()){ return -1; }else{ return 1; //按编码从小到大排列 } } }