日期:2014-05-16 浏览次数:20414 次
在ExtJs项目开发过程中少不了筛选查询功能,而对于这部分功能又基本是大同小异,无非就是对相应条件数据进行筛选查看了,所以我们针对这部分专门去实现了一个控件,用于对所有的数据列表进行查询的通用筛选!
?
先看下示例图:
?
控件核心代码如下:
?
这部分代码比较多,可能再打开浏览器的时候看不到,请大家在附件中下载即可。
?
function createFilter(store,moduleCode,callback) { Ext.form.Field.prototype.msgTarget = "side"; ////////////////////变量、常量区//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /** * 当前筛选条件节点 * @type TreeNode */ var currentFilter={attributes:{}}; var allOperator={EQ:"0",NE:"1",LIKE:"2",NLIKE:"3",GT:"4",LT:"5",GE:"6",LE:"7",NULL:"8",NOTNULL:"9",ASC:"10",DESC:"11"}; /** * 数字操作运算符集合 * @type Array */ var numericOp = datetimeOp = [[allOperator.EQ, "等于"], [allOperator.NE, "不等于"], [allOperator.GT, "大于"] , [allOperator.LT, "小于"], [allOperator.GE, "大于等于"],[allOperator.LE, "小于等于"],[allOperator.NULL, "空白"], [allOperator.NOTNULL, "非空白"]]; /** * 所有的运算符 * @type Array */ var allOp = [[allOperator.EQ, "等于"], [allOperator.NE, "不等于"],[allOperator.LIKE, "包含字符"], [allOperator.NLIKE, "不包含字符"], [allOperator.GT, "大于"] , [allOperator.LT, "小于"], [allOperator.GE, "大于等于"],[allOperator.LE, "小于等于"],[allOperator.NULL, "空白"], [allOperator.NOTNULL, "非空白"], [allOperator.ASC, "升序"], [allOperator.DESC, "降序"]]; /** * 字符操作运算符 * @type Array */ var stringOp = [[allOperator.EQ, "等于"], [allOperator.NE, "不等于"],[allOperator.LIKE, "包含字符"], [allOperator.NLIKE, "不包含字符"],[allOperator.NULL, "空白"], [allOperator.NOTNULL, "非空白"]]; /** * 自定义,下拉框,boolean操作运算符 * @type */ var lookupOp = booleanOp = [[allOperator.EQ, "等于"], [allOperator.NE, "不等于"], [allOperator.NULL, "空白"], [allOperator.NOTNULL, "非空白"]]; /** * 最后一行下标 * @type Number */ var lineIndex = 0;// 新增行下标 /** * 当前编辑行 * @type int */ var currentIndex=0;// 当前编辑行号 /** * 左边树面板折叠状态,默认为打开 * @type Boolean */ var treeColFlag=false; /** * 第一行下标,默认为0 */ var firstIndex=0; /** * 存放排序字段的下标, 避免重复 */ var sortInfo={}; /** * 筛选结果数据源 */ var filterStore = new Ext.data.Store({//模块列数据源 id:moduleCode+"_filterStore", proxy : new Ext.data.HttpProxy({ url : "filterAction!getFilterInfo.action" }), reader : new Ext.data.JsonReader({ root : "root", totalProperty : "total", fields : ["fieldName", "fieldId", "fieldLabel", "operator", "setValue", "inputType", "fieldType", "inputSql", "method", "relation", "rightBr", "leftBr", "sort", "displayValue", "delFlag", "idRender","userQueryId","custom"] }) }); ////////////////////初始化方法区//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //初始化store,如果不是公用Grid 来的,要把fieldType转成相对应的数字 if(store.getCount()>0) store.each(function(rec){ switch(rec.get("fieldType")) { case "string":rec.set("fieldType",1);break; case "int":rec.set("fieldType",2);break; case "float":rec.set("fieldType",3);break; case "boolean":rec.set("fieldType",4);break; case "date":rec.set("fieldType",5);break; case "gender":rec.set("fieldType",6);break; } }) else store.load(); /** * 文本输入框 * @param {int} index 行索引 */ var objGridTextEditor = function(index) { return new Ext.form.TextField({ id : moduleCode+"_setValue" + index, emptyText : "请输入..." }); } /** * 整型输入框 * @param {int} index 行索引 */ var objGridIntegerEditor = function(index) { return new Ext.form.NumberField({ id : moduleCode+"_setValue" + index, allowNegative : false, allowDecimals : false, emptyText : "请输入整数..." }); } /** * 浮点型输入框 * @param {int} index 行索引 */ var objGridFloatEditor = function(index) { return new Ext.form.NumberField({ id : moduleCode+"_setValue" + index, allowNegative : false, emptyText : "请输入数字..." }); } /