ExtJs4(3)——带搜索和操作按钮的表

带搜索和操作按钮的表(这里的问题是,下面由两条框框,不知怎么去掉,浪费不少空间也影响了美观。)

点击:

修改按钮:将弹出此窗口

详细按钮:与修改按钮相同,但保存按钮为不可能状态(即不能保存,只能查看)

新增按钮:与修改按钮相同,但里面没有数据



带搜索功能的表格已经在前文写过,在此便不再赘述。本文的要点是如何为表格添加对应的弹出窗口。

 

弹出窗口一般由两部分组成,一部分是外面的Window,另外一部分则是嵌入在Window里的与Grid的Columns想对应的内容

一般来说可以这样写:

ModifyWin = Ext.extend(Ext.util.Observable,{
     alertWin : null,		/* 弹出窗口 */
     alertPanel : null,		/* 弹出Panel */
     field : null,   		/* 放置弹出窗口内使用的变量 */

     constructor:function() {
	this.alertPanel = new MyFormPanel; //MyFormPanel是与表格Columns对应的Panel
	this.alertWin = Ext.create('Ext.window.Window', {
	    //别的一些属性
	    items: this.alertPanel
        }
     }
});

这样,便可以用一个变量modifyWin= New ModifyWin来产生一个实例作为缓存,而不需要每次弹出窗口时重新初始化一个窗口。

 

全部代码:

pageVar.js

var pageVar={};
//--------------------------弹出窗口的设置-----------------------------
pageVar.SRC_LOC_Y = 5;		//Panel中item项的起始点的x
pageVar.SRC_LOC_X = 5;		//Panel中item项的起始点的y
pageVar.EACH_DIST_Y = 30;	//上下两个Item之间的距离
pageVar.FIELD_WIDTH = 60;	//item项的默认长度
pageVar.vWidth=210;         //标签的整体宽度
pageVar.vFieldW=210;        //标签空白内容的宽度
pageVar.LABEL_WIDTH = 70;	//item项的标签的默认宽度
pageVar.vOneLineWidth = 2 * pageVar.vWidth;                 //一行只放置一个标签时,标签的长度
pageVar.vPanelW = pageVar.vOneLineWidth + 65;


//--------------------与grid相关的参数设置--------------------

pageVar.gridTitle = 'sysLogPanel';               //表的标题

pageVar.ajaxRequestUrl = 'grid.json'               //连接ajax的url

pageVar.modelName = 'sysLog';

pageVar.rootName = 'sysLog';

pageVar.gridStoreUrl = 'sysLog.json';   //表的Store的url

//其中数字1代表有效,0代表无效
pageVar.bButtons = [ 0, 1, 0, 0 ];              //bButtons[0]为添加按钮,bButtons[1]为修改,bButtons[2]为查询,bButtons[3]为删除;

//gird的columns
pageVar.columns = [  
      {text:'日志ID', width:100, dataIndex:'SYSLOG_ID', hidden: true},
      {text:'日志类型', width:100, dataIndex:'SYSLOG_TYPE', hidden: false},
      {text:'日志描述', width:100, dataIndex:'SYSLOG_DESC', hidden: false},
      {text:'日志类别', width:100, dataIndex:'SYSLOG_KIND', hidden: false},
      {text:'日志来源', width:100, dataIndex:'SYSLOG_SOURCE', hidden: false},
      {text:'创建时间', width:100, dataIndex:'SYSLOG_CREATETIME', hidden: false},
      {text:'日志级别', width:100, dataIndex:'SYSLOG_LEV', hidden: false},
      {text:'IP地址', width:100, dataIndex:'SYSLOG_IP', hidden: false},
      {text:'菜单编码', width:100, dataIndex:'SYSMENU_CODE', hidden: false},
      {text:'用户表信息ID', width:100, dataIndex:'SYSUSER_ID', hidden: true}
   ];

//grid中Store的模型
Ext.define(pageVar.modelName,{ 
   extend: 'Ext.data.Model', 
   fields: [ 
       'SYSLOG_ID',   //日志ID
       'SYSLOG_TYPE',   //日志类型
       'SYSLOG_DESC',   //日志描述
       'SYSLOG_KIND',   //日志类别
       'SYSLOG_SOURCE',   //日志来源
       'SYSLOG_CREATETIME',   //创建时间
       'SYSLOG_LEV',   //日志级别
       'SYSLOG_IP',   //IP地址
       'SYSMENU_CODE',   //菜单编码
       'SYSUSER_ID'   //用户表信息ID
   ]
});

//--------------------------开始函数-----------------------------
function initPage(){ 
   initLocalExt();
   new ShowGrid();
}

alertPanelGrid.js:

//用来修改和添加的菜单
Ext.define('MyFormPanel', {
 extend : 'Ext.form.Panel',
	layout: 'absolute',			//该panel的布局
	defaultType: 'textfield',	//该panel中Item项的默认类型
	border: false,				//是否显示边框
	frame: true,				//是否显示帧
	autoScroll: true,			//允许当内容超出高度时,自动产生滚动条
	initComponent: function() {
//日志类别
		pageVar.SYSLOG_KINDStore = eval("[{'value':'0', 'text':'类别1'},{'value':'1', 'text':'类别2'},{'value':'2', 'text':'类别3'}]");
		var SYSLOG_KINDStore = Ext.create('Ext.data.Store', {
		    fields: ['value', 'text'],
		    data:pageVar.SYSLOG_KINDStore
		});

		var count = -1;			//用来记录panel中的行数,便于排版

		this.items = [					//为该panel添加内容
     {
			xtype: 'textfield',
			fieldLabel: '日志ID',
			allowBlank: false,
			id: 'SYSLOG_ID',
            disabled: true,
			fieldWidth: pageVar.vFieldW,
			width: pageVar.vWidth,
			labelWidth: pageVar.LABEL_WIDTH,
			x: pageVar.SRC_LOC_X,
			y: pageVar.SRC_LOC_Y + pageVar.EACH_DIST_Y * ( ++count ),
			anchor: '-5'
     }, 
     {
			xtype: 'textfield',
			fieldLabel: '日志类型',
			allowBlank: false,
			id: 'SYSLOG_TYPE',
			fieldWidth: pageVar.vFieldW,
			labelWidth: pageVar.LABEL_WIDTH + 10, 
			width: pageVar.vWidth,
			labelAlign: 'right',
			x:pageVar.SRC_LOC_X + pageVar.vWidth,
			y: pageVar.SRC_LOC_Y + pageVar.EACH_DIST_Y * ( count ) ,	//此行放置了两个item,所以count无需增加
			anchor: '-5'
     }, 
     {
			xtype: 'textfield',
			fieldLabel: '日志描述',
			allowBlank: false,
			id: 'SYSLOG_DESC',
			fieldWidth: pageVar.vFieldW,
			labelWidth: pageVar.LABEL_WIDTH,
			width: pageVar.vOneLineWidth,
			x: pageVar.SRC_LOC_X,
			y: pageVar.SRC_LOC_Y + pageVar.EACH_DIST_Y * ( ++count ),
			anchor: '-5'
     }, 
     {
			store: SYSLOG_KINDStore,
         queryMode: 'local',
			displayField: 'text',
			valueField: 'value',
			xtype: 'combobox',
			fieldLabel: '日志类别',
			allowBlank: false,
			id: 'SYSLOG_KIND',
			fieldWidth: pageVar.vFieldW,
			width: pageVar.vWidth,
			labelWidth: pageVar.LABEL_WIDTH,
			x: pageVar.SRC_LOC_X,
			y: pageVar.SRC_LOC_Y + pageVar.EACH_DIST_Y * ( ++count ),
			anchor: '-5'
     }, 
     {
			xtype: 'textfield',
			fieldLabel: '日志来源',
			allowBlank: false,
			id: 'SYSLOG_SOURCE',
			fieldWidth: pageVar.vFieldW,
			labelWidth: pageVar.LABEL_WIDTH + 10, 
			width: pageVar.vWidth,
			labelAlign: 'right',
			x:pageVar.SRC_LOC_X + pageVar.vWidth,
			y: pageVar.SRC_LOC_Y + pageVar.EACH_DIST_Y * ( count ) ,	//此行放置了两个item,所以count无需增加
			anchor: '-5'
     }, 
     {
			xtype: 'textfield',
			fieldLabel: '创建时间',
			allowBlank: false,
			id: 'SYSLOG_CREATETIME',
			fieldWidth: pageVar.vFieldW,
			width: pageVar.vWidth,
			labelWidth: pageVar.LABEL_WIDTH,
			x: pageVar.SRC_LOC_X,
			y: pageVar.SRC_LOC_Y + pageVar.EACH_DIST_Y * ( ++count ),
			anchor: '-5'
     }, 
     {
			xtype: 'textfield',
			fieldLabel: '日志级别',
			allowBlank: false,
			id: 'SYSLOG_LEV',
			fieldWidth: pageVar.vFieldW,
			labelWidth: pageVar.LABEL_WIDTH + 10, 
			width: pageVar.vWidth,
			labelAlign: 'right',
			x:pageVar.SRC_LOC_X + pageVar.vWidth,
			y: pageVar.SRC_LOC_Y + pageVar.EACH_DIST_Y * ( count ) ,	//此行放置了两个item,所以count无需增加
			anchor: '-5'
     }, 
     {
			xtype: 'textfield',
			fieldLabel: 'IP地址',
			allowBlank: false,
			id: 'SYSLOG_IP',
			fieldWidth: pageVar.vFieldW,
			width: pageVar.vWidth,
			labelWidth: pageVar.LABEL_WIDTH,
			x: pageVar.SRC_LOC_X,
			y: pageVar.SRC_LOC_Y + pageVar.EACH_DIST_Y * ( ++count ),
			anchor: '-5'
     }, 
     {
			xtype: 'textfield',
			fieldLabel: '菜单编码',
			allowBlank: false,
			id: 'SYSMENU_CODE',
			fieldWidth: pageVar.vFieldW,
			labelWidth: pageVar.LABEL_WIDTH + 10, 
			width: pageVar.vWidth,
			labelAlign: 'right',
			x:pageVar.SRC_LOC_X + pageVar.vWidth,
			y: pageVar.SRC_LOC_Y + pageVar.EACH_DIST_Y * ( count ) ,	//此行放置了两个item,所以count无需增加
			anchor: '-5'
     }, 
     {
			xtype: 'textfield',
			fieldLabel: '用户表信息ID',
			allowBlank: false,
			id: 'SYSUSER_ID',
                 disabled: true,
			fieldWidth: pageVar.vFieldW,
			width: pageVar.vWidth,
			labelWidth: pageVar.LABEL_WIDTH,
			x: pageVar.SRC_LOC_X,
			y: pageVar.SRC_LOC_Y + pageVar.EACH_DIST_Y * ( ++count ),
			anchor: '-5'
     }

     ];
		this.callParent(arguments);
	}
});



//--------------------------------------------弹出修改/增加窗口--------------------------------------------
var modifyWin = null;   //弹出窗口
//创建弹出表单
ModifyWin = Ext.extend(Ext.util.Observable,{
     alertWin : null,
     alertPanel : null,
     field : null,   //放置弹出窗口需要的变量

	constructor:function() {
		this.alertPanel = new MyFormPanel;

		this.alertWin = Ext.create('Ext.window.Window', {
			modal:true,					
		    title:pageVar.alertPanelTitle,		   
		    layout: 'fit',
			width: pageVar.vPanelW,
			height: 300,
		    items: this.alertPanel ,
		    constrain:true,
		    shrinkWrap:3,
		    autoScroll: true,
		    closeAction:'hide',
		    buttons: [  //在窗口中增加按钮
				{
					text: '保存',		
					minWidth:70,
					id: 'savaButton',
					scope:this,
					handler: this.save
				}, {
					text: '重置',
					minWidth: 70,
					scope:this,
					handler: this.reset 
				}, {
					text: '取消',
					minWidth: 70,
					scope:this,
					handler: this.cancel
				}]
		});			
	},

	cancel:function(){
		this.alertWin.hide();
	},

	show: function() {
		this.alertWin.show();
	},

	reset: function() {
		this.alertPanel.getForm().reset();
	},
 
	save:function() {
		if ( this.field == null ) {
			this.initialField();
		}
			
		Ext.Ajax.request( {
			url:pageVar.ajaxRequestUrl,
			success:function(response,option){
			var rs = Ext.decode(response.responseText);
				if(rs.success)
				{
					Ext.MessageBox.alert('提示',rs.msg);
					pageVar.store.load();//重新加载数据
					this.alertWin.hide();
				}
				else
				{
					Ext.MessageBox.alert('提示',rs.msg);
				}
			},
			failure:function(response){
				Ext.MessageBox.alert('提示','网络错误或连不到服务!');
			},
			scope:this,
			params : {
				oper : pageVar.Oper,		//1: 查询, 2:添加, 3:修改, 4:删除
               SYSLOG_ID:this.field.var_SYSLOG_ID.getValue(),   //日志ID
               SYSLOG_TYPE:this.field.var_SYSLOG_TYPE.getValue(),   //日志类型
               SYSLOG_DESC:this.field.var_SYSLOG_DESC.getValue(),   //日志描述
               SYSLOG_KIND:this.field.var_SYSLOG_KIND.getValue(),   //日志类别
               SYSLOG_SOURCE:this.field.var_SYSLOG_SOURCE.getValue(),   //日志来源
               SYSLOG_CREATETIME:this.field.var_SYSLOG_CREATETIME.getValue(),   //创建时间
               SYSLOG_LEV:this.field.var_SYSLOG_LEV.getValue(),   //日志级别
               SYSLOG_IP:this.field.var_SYSLOG_IP.getValue(),   //IP地址
               SYSMENU_CODE:this.field.var_SYSMENU_CODE.getValue(),   //菜单编码
               SYSUSER_ID:this.field.var_SYSUSER_ID.getValue()   //用户表信息ID
           }

		});	
	},
	initialField: function() {
		this.field = {};
       this.field.var_SYSLOG_ID = Ext.getCmp('SYSLOG_ID'),   //日志ID
       this.field.var_SYSLOG_TYPE = Ext.getCmp('SYSLOG_TYPE'),   //日志类型
       this.field.var_SYSLOG_DESC = Ext.getCmp('SYSLOG_DESC'),   //日志描述
       this.field.var_SYSLOG_KIND = Ext.getCmp('SYSLOG_KIND'),   //日志类别
       this.field.var_SYSLOG_SOURCE = Ext.getCmp('SYSLOG_SOURCE'),   //日志来源
       this.field.var_SYSLOG_CREATETIME = Ext.getCmp('SYSLOG_CREATETIME'),   //创建时间
       this.field.var_SYSLOG_LEV = Ext.getCmp('SYSLOG_LEV'),   //日志级别
       this.field.var_SYSLOG_IP = Ext.getCmp('SYSLOG_IP'),   //IP地址
       this.field.var_SYSMENU_CODE = Ext.getCmp('SYSMENU_CODE'),   //菜单编码
       this.field.var_SYSUSER_ID = Ext.getCmp('SYSUSER_ID')   //用户表信息ID
	},

	load: function( item ) {
		if ( this.field == null ) {
			this.initialField();
		}

		this.field.var_SYSLOG_ID.setValue( item.get( 'SYSLOG_ID' ) );   //日志ID
		this.field.var_SYSLOG_TYPE.setValue( item.get( 'SYSLOG_TYPE' ) );   //日志类型
		this.field.var_SYSLOG_DESC.setValue( item.get( 'SYSLOG_DESC' ) );   //日志描述
		this.field.var_SYSLOG_KIND.setValue( item.get( 'SYSLOG_KIND' ) );   //日志类别
		this.field.var_SYSLOG_SOURCE.setValue( item.get( 'SYSLOG_SOURCE' ) );   //日志来源
		this.field.var_SYSLOG_CREATETIME.setValue( item.get( 'SYSLOG_CREATETIME' ) );   //创建时间
		this.field.var_SYSLOG_LEV.setValue( item.get( 'SYSLOG_LEV' ) );   //日志级别
		this.field.var_SYSLOG_IP.setValue( item.get( 'SYSLOG_IP' ) );   //IP地址
		this.field.var_SYSMENU_CODE.setValue( item.get( 'SYSMENU_CODE' ) );   //菜单编码
		this.field.var_SYSUSER_ID.setValue( item.get( 'SYSUSER_ID' ) );   //用户表信息ID
	}

});
//删除所选中表格中的数据
function deleteData(){
    var myGrid = Ext.getCmp( 'myGrid' );
    var  record= myGrid.getSelectionModel().getSelection();	//取得选中的项

    var idAll = "";
    for(var i = 0; i < record.length; i++){
       idAll += "'"+record[i].get( pageVar.treeNodeIdColumn )+"'";
        if(i<record.length-1){
            idAll = idAll + ",";
        } 
    } 
           
    Ext.Ajax.request( {
        url:pageVar.ajaxRequestUrl,
        success:function(response,option){
        var rs = Ext.decode(response.responseText);
            if(rs.success)
            {
                Ext.MessageBox.alert('提示',rs.msg);
                pageVar.store.load();//重新加载数据
				
            }
            else
            {
                Ext.MessageBox.alert('提示',rs.msg);
            }
        },
        failure:function(response){
            Ext.MessageBox.alert('提示','网络错误或连不到服务!');
        },
        scope:this,
        params : {
            oper : 4,		//1: 查询, 2:添加, 3:修改, 4:删除
            SYSCST_ID:idAll
        }
    });	
}

gridPubFun.js:

Ext.require([ 
    'Ext.grid.*', 
    'Ext.toolbar.Paging', 
    'Ext.data.*'
]); 

//弹出窗口,并确定弹出式新增、详细还是修改窗口
var showWindow = function( btn ) {
	if(Ext.isEmpty(modifyWin)) {
		modifyWin = new ModifyWin();
	}
	Ext.getCmp('savaButton').setDisabled( 0 );		//设置保存按钮为可用
	if ( btn == 'add' ) 	{		//如果点击的不是添加按钮(详细或者修改按钮)
	    pageVar.Oper = 2;
		modifyWin.reset();
	} else {
	    pageVar.Oper = 3;
		if ( btn == 'detail' ) {
			Ext.getCmp('savaButton').setDisabled( 1 );		//设置保存按钮为不可用
		}
		//为表格读取数据
		var myGrid = Ext.getCmp( 'myGrid' );
		var selected = myGrid.getSelectionModel().getSelection();	//取得选中的项
		modifyWin.load( selected[0] );
	}
	modifyWin.show();
};

ShowGrid = Ext.extend(Ext.util.Observable,{
     viewPort : null,
	 constructor:function() {
	    this.loadStore();
	    
	    //设置整张表的Model为选择框模型
	    var selModel = Ext.create('Ext.selection.CheckboxModel', {
		    listeners: {
			    selectionchange: function(sm, selections) {
				    //设置此按钮在表格中的项被选上时有效
				    pageVar.mainPanel.down('#removeButton').setDisabled( ! pageVar.bButtons[3] || selections.length == 0 );

				    //设置只有在表格中的项只有一个被选上时才有效
				    pageVar.mainPanel.down('#detailButton').setDisabled( ! pageVar.bButtons[1] || selections.length != 1 );
				    pageVar.mainPanel.down('#modifyButton').setDisabled( ! pageVar.bButtons[2] || selections.length != 1 );
			    }
		    }
	    });
       
        pageVar.mainPanel = Ext.create('MyGridPanel',{ 	//自定义的带搜索功能的表
            store: pageVar.store,
            id: 'myGrid',	
            selModel: selModel,			//表格模型
            columns: pageVar.columns, 
            title: pageVar.gridTitle, 
            loadMask: true, 
		    region:'center'
        }); 
        
        pageVar.mainPanel.down('#addButton').setDisabled( ! pageVar.bButtons[0] );
	    //双击表格中的项就出现弹出修改窗口
	    var dblclick = function() {
		    showWindow();
	    };
    	
	    pageVar.mainPanel.addListener( 'itemdblclick', dblclick );
	    
	    this.viewPort = new Ext.Viewport({
		    layout : 'border',
		    items : [pageVar.mainPanel]
        });
	 },
	 
	 //为store载入内容
	 loadStore : function() {
	    pageVar.store = Ext.create('Ext.data.Store', { 
            //分页大小 
            pageSize: 50, 
            model: pageVar.modelName, 
            proxy: { 
               //异步获取数据,这里的URL可以改为任何动态页面,只要返回JSON数据即可 
                type: 'ajax', 
                url: pageVar.gridStoreUrl,
                 
                reader: { 
                    root: pageVar.rootName, 
                    totalProperty  : 'total'
                }
            }
        }); 
	    pageVar.store.loadPage(1);
	 },
	 //关闭窗口
	 cancel:function(){
	    this.viewPort.hide();
	 },

     //展示窗口
	 show: function() {
	    this.viewPort.show();
	 }
});

LiveSearchGridPanel.js:

Ext.define('MyGridPanel', {
    extend: 'Ext.grid.Panel',
    requires: [
        'Ext.toolbar.TextItem',
        'Ext.form.field.Checkbox',
        'Ext.form.field.Text'
    ],
    
    /**
     * @private
     * search value initialization
     */
    searchValue: null,
    
    /**
     * @private
     * The row indexes where matching strings are found. (used by previous and next buttons)
     */
    indexes: [],
    
    /**
     * @private
     * The row index of the first search, it could change if next or previous buttons are used.
     */
    currentIndex: null,
    
    /**
     * @private
     * The generated regular expression used for searching.
     */
    searchRegExp: null,
    
    /**
     * @private
     * Case sensitive mode.
     */
    caseSensitive: false,
    
    /**
     * @private
     * Regular expression mode.
     */
    regExpMode: false,
    
    /**
     * @cfg {String} matchCls
     * The matched string css classe.
     */
    matchCls: 'x-livesearch-match',
    
    defaultStatusText: '',
    
    // Component initialization override: adds the top and bottom toolbars and setup headers renderer.
    initComponent: function() {
        var me = this;
        me.tbar = [{
                 xtype: 'textfield',
                 name: 'searchField',
                 hideLabel: true,
                 width: 200
            }, {
                xtype: 'button',
                text: '搜索',
                tooltip: '',
                handler: me.onSearch,
                scope: me
			}, ' ', {
			    itemId: 'addButton',
                text: '添加',
				tooltip:'新增一个协议',	//显示提示
				iconCls:'add',
				handler: function() {
					showWindow( 'add' );	
				}
            }, '-', {
				itemId: 'detailButton',
                text: '详细',
				tooltip:'详细显示该协议',
				iconCls:'option',
				disabled: true,
				handler: function() {
					showWindow( 'detail' );
				}
            }, '-', {
				itemId: 'modifyButton',
                text: '修改',
				tooltip:'修改所选中的协议',
				iconCls:'modify',
				disabled: true,
				handler: function() {
					showWindow( 'modify' );
				}
            }, '-', {
				itemId: 'removeButton',
                text: '删除',
				tooltip:'删除所选中的协议',
				iconCls:'remove',
				disabled: true,
				handler: function() {
				

				Ext.MessageBox.confirm('确认', '确定要删除吗?',function(btn){  
                       if (btn == 'yes')
               	        {
               		        deleteData();
                       }
                    }); 
					
				}
            }];

        me.bbar = Ext.create('Ext.ux.StatusBar', {
            defaultText: me.defaultStatusText,
            name: 'searchStatusBar'
        });
        
        me.callParent(arguments);
    },
    
    // afterRender override: it adds textfield and statusbar reference and start monitoring keydown events in textfield input 
    afterRender: function() {
        var me = this;
        me.callParent(arguments);
        me.textField = me.down('textfield[name=searchField]');
        me.statusBar = me.down('statusbar[name=searchStatusBar]');
    },
    // detects html tag
    tagsRe: /<[^>]*>/gm,
    
    // DEL ASCII code
    tagsProtect: '\x0f',
    
    // detects regexp reserved word
    regExpProtect: /\\|\/|\+|\\|\.|\[|\]|\{|\}|\?|\$|\*|\^|\|/gm,
    
    /**
     * In normal mode it returns the value with protected regexp characters.
     * In regular expression mode it returns the raw value except if the regexp is invalid.
     * @return {String} The value to process or null if the textfield value is blank or invalid.
     * @private
     */
    getSearchValue: function() {
        var me = this,
            value = me.textField.getValue();
            
        if (value === '') {
            return null;
        }
        if (!me.regExpMode) {
            value = value.replace(me.regExpProtect, function(m) {
                return '\\' + m;
            });
        } else {
            try {
                new RegExp(value);
            } catch (error) {
                me.statusBar.setStatus({
                    text: error.message,
                    iconCls: 'x-status-error'
                });
                return null;
            }
            // this is stupid
            if (value === '^' || value === '$') {
                return null;
            }
        }

        return value;
    },

    /**
     * Finds all strings that matches the searched value in each grid cells.
     * @private
     */
     onSearch: function() {
         var me = this,
             count = 0;
	    	
	     me.store.rejectChanges();
         me.view.refresh();
         // reset the statusbar
         me.statusBar.setStatus({
             text: me.defaultStatusText,
             iconCls: ''
         });

         me.searchValue = me.getSearchValue();
         me.currentIndex = null;

         if (me.searchValue !== null) {
             me.searchRegExp = new RegExp(me.searchValue, 'g' + (me.caseSensitive ? '' : 'i'));
             
			var totalCount = me.store.getTotalCount();
			for ( idx = 0; idx < totalCount; idx ++ ) {
					
				 var record = me.store.getAt( idx );
                 var td = Ext.fly(me.view.getNode( idx )).down('td'),
                     cell, matches, cellHTML;

				 var find = false;

                 while(td) {
                     cell = td.down('.x-grid-cell-inner');
                     matches = cell.dom.innerHTML.match(me.tagsRe);
                     cellHTML = cell.dom.innerHTML.replace(me.tagsRe, me.tagsProtect);
                     
                     // populate indexes array, set currentIndex, and replace wrap matched string in a span
                     cellHTML = cellHTML.replace(me.searchRegExp, function(m) {
						find = true;
                        if (Ext.Array.indexOf(me.indexes, idx) === -1) {
                            me.indexes.push(idx);
                        }
                        if (me.currentIndex === null) {
                            me.currentIndex = idx;
                        }
                        return '<span class="' + me.matchCls + '">' + m + '</span>';
                     });

                     // restore protected tags
                     Ext.each(matches, function(match) {
                        cellHTML = cellHTML.replace(me.tagsProtect, match); 
                     });
                     // update cell html
                     cell.dom.innerHTML = cellHTML;
                     td = td.next();
                 }
				 if ( ! find ) {	//如果该行没有找到需要的结果
					me.store.remove( record );
					totalCount --;
					idx --;
				 } else {
					count ++;
				 }
			};

             // results found
             if (me.currentIndex !== null) {
                 me.getSelectionModel().select(me.currentIndex);
                 me.statusBar.setStatus({
                     text: '共找到' + count + '条.',
                     iconCls: 'x-status-valid'
                 });
             }
         }

         // no results found
         if (me.currentIndex === null) {
             me.getSelectionModel().deselectAll();
         }

         // force textfield focus
         me.textField.focus();
     }
});

sysLog.json

{  
 "sysLog": [
 {
     "SYSLOG_ID":"SYSLOG_ID1",
     "SYSLOG_TYPE":"SYSLOG_TYPE1",
     "SYSLOG_DESC":"SYSLOG_DESC1",
     "SYSLOG_KIND":"SYSLOG_KIND1",
     "SYSLOG_SOURCE":"SYSLOG_SOURCE1",
     "SYSLOG_CREATETIME":"SYSLOG_CREATETIME1",
     "SYSLOG_LEV":"SYSLOG_LEV1",
     "SYSLOG_IP":"SYSLOG_IP1",
     "SYSMENU_CODE":"SYSMENU_CODE1",
     "SYSUSER_ID":"SYSUSER_ID1"
 }, {
     "SYSLOG_ID":"SYSLOG_ID2",
     "SYSLOG_TYPE":"SYSLOG_TYPE2",
     "SYSLOG_DESC":"SYSLOG_DESC2",
     "SYSLOG_KIND":"SYSLOG_KIND2",
     "SYSLOG_SOURCE":"SYSLOG_SOURCE2",
     "SYSLOG_CREATETIME":"SYSLOG_CREATETIME2",
     "SYSLOG_LEV":"SYSLOG_LEV2",
     "SYSLOG_IP":"SYSLOG_IP2",
     "SYSMENU_CODE":"SYSMENU_CODE2",
     "SYSUSER_ID":"SYSUSER_ID2"
 }, {
     "SYSLOG_ID":"SYSLOG_ID3",
     "SYSLOG_TYPE":"SYSLOG_TYPE3",
     "SYSLOG_DESC":"SYSLOG_DESC3",
     "SYSLOG_KIND":"SYSLOG_KIND3",
     "SYSLOG_SOURCE":"SYSLOG_SOURCE3",
     "SYSLOG_CREATETIME":"SYSLOG_CREATETIME3",
     "SYSLOG_LEV":"SYSLOG_LEV3",
     "SYSLOG_IP":"SYSLOG_IP3",
     "SYSMENU_CODE":"SYSMENU_CODE3",
     "SYSUSER_ID":"SYSUSER_ID3"
 }, {
     "SYSLOG_ID":"SYSLOG_ID4",
     "SYSLOG_TYPE":"SYSLOG_TYPE4",
     "SYSLOG_DESC":"SYSLOG_DESC4",
     "SYSLOG_KIND":"SYSLOG_KIND4",
     "SYSLOG_SOURCE":"SYSLOG_SOURCE4",
     "SYSLOG_CREATETIME":"SYSLOG_CREATETIME4",
     "SYSLOG_LEV":"SYSLOG_LEV4",
     "SYSLOG_IP":"SYSLOG_IP4",
     "SYSMENU_CODE":"SYSMENU_CODE4",
     "SYSUSER_ID":"SYSUSER_ID4"
 }, {
     "SYSLOG_ID":"SYSLOG_ID5",
     "SYSLOG_TYPE":"SYSLOG_TYPE5",
     "SYSLOG_DESC":"SYSLOG_DESC5",
     "SYSLOG_KIND":"SYSLOG_KIND5",
     "SYSLOG_SOURCE":"SYSLOG_SOURCE5",
     "SYSLOG_CREATETIME":"SYSLOG_CREATETIME5",
     "SYSLOG_LEV":"SYSLOG_LEV5",
     "SYSLOG_IP":"SYSLOG_IP5",
     "SYSMENU_CODE":"SYSMENU_CODE5",
     "SYSUSER_ID":"SYSUSER_ID5"
 }, {
     "SYSLOG_ID":"SYSLOG_ID6",
     "SYSLOG_TYPE":"SYSLOG_TYPE6",
     "SYSLOG_DESC":"SYSLOG_DESC6",
     "SYSLOG_KIND":"SYSLOG_KIND6",
     "SYSLOG_SOURCE":"SYSLOG_SOURCE6",
     "SYSLOG_CREATETIME":"SYSLOG_CREATETIME6",
     "SYSLOG_LEV":"SYSLOG_LEV6",
     "SYSLOG_IP":"SYSLOG_IP6",
     "SYSMENU_CODE":"SYSMENU_CODE6",
     "SYSUSER_ID":"SYSUSER_ID6"
 }]
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值