`
忧里修斯
  • 浏览: 432461 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Ext封装(二)

阅读更多
/**
 *@projectname Student's Flat Manager
 *@author 
 *@filename ext-package.js
 *@today 2009-09-17 
 */
 Ext.namespace('Ext.ux');
  Ext.QuickTips.init();  //按钮快捷提示初始化
  Ext.form.Field.prototype.msgTarget = 'qtip';

 /**
  * 
  *messagebox show 
  */
Msg = Ext.MessageBox;
Ext.RoleInfo = function(){};
Ext.roleInfo = parent.window.Ext.roleInfo ? parent.window.Ext.roleInfo : new Ext.RoleInfo();
 /**
  *IP访问验证  
  */
 Ext.ux.lock=function(t){
    var requestURL = t==null?document.URL:parent.document.URL;
    var ip="127.0.0.1:8080";
    var flag = true;
    var validURL="http://"+ip+"/sfm/sfmindex.jsp/";
    if(validURL.indexOf(requestURL)!=0){
       window.location.href="http://"+ip+"/sfm/";
       flag = false;
    }
    return flag;
 };
 
 /**
  *封装 suggest显示 
  */
 Ext.ux.suggest = function(){
    var msgCt;

    function createBox(t, s){
        return ['<div class="msg">',
                '<div class="x-box-tl"><div class="x-box-tr"><div class="x-box-tc"></div></div></div>',
                '<div class="x-box-ml"><div class="x-box-mr"><div class="x-box-mc"><h3><font color=#FF0000>', t, '</font></h3>', s, '</div></div></div>',
                '<div class="x-box-bl"><div class="x-box-br"><div class="x-box-bc"></div></div></div>',
                '</div>'].join('');
    }
    return {
        msg : function(title, format){
            if(!msgCt){
                msgCt = Ext.DomHelper.insertFirst(document.body, {id:'msg-div'}, true);
            }
            var s = String.format.apply(String, Array.prototype.slice.call(arguments, 1));
            var m = Ext.DomHelper.append(msgCt, {html:createBox(title, s)}, true);
            m.slideIn('t').pause(2).ghost("t", {remove:true});
        },

        init : function(){
            /*
            var t = Ext.get('exttheme');
            if(!t){ // run locally?
                return;
            }
            var theme = Cookies.get('exttheme') || 'aero';
            if(theme){
                t.dom.value = theme;
                Ext.getBody().addClass('x-'+theme);
            }
            t.on('change', function(){
                Cookies.set('exttheme', t.getValue());
                setTimeout(function(){
                    window.location.reload();
                }, 250);
            });*/

            var lb = Ext.get('lib-bar');
            if(lb){
                lb.show();
            }
        }
    }
}();

Ext.apply(Ext.MessageBox,{
      suggest:Ext.ux.suggest.msg
});
/**
 *iframe 
 */
Ext.ux.IFrameComponent = Ext.extend(Ext.BoxComponent, {
			     onRender : function(ct, position){
			          this.el = ct.createChild({tag: 'iframe', id: this.id, frameBorder: 0, src: this.URL});
			     }
             });

 /**
  * Cookies
  */
var Cookies = {};
Cookies.set = function(name, value){
     var argv = arguments;
     var argc = arguments.length;
     var expires = (argc > 2) ? argv[2] : null;
     var path = (argc > 3) ? argv[3] : '/';
     var domain = (argc > 4) ? argv[4] : null;
     var secure = (argc > 5) ? argv[5] : false;
     document.cookie = name + "=" + escape (value) +
       ((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
       ((path == null) ? "" : ("; path=" + path)) +
       ((domain == null) ? "" : ("; domain=" + domain)) +
       ((secure == true) ? "; secure" : "");
};

Cookies.get = function(name){
	var arg = name + "=";
	var alen = arg.length;
	var clen = document.cookie.length;
	var i = 0;
	var j = 0;
	while(i < clen){
		j = i + alen;
		if (document.cookie.substring(i, j) == arg)
			return Cookies.getCookieVal(j);
		i = document.cookie.indexOf(" ", i) + 1;
		if(i == 0)
			break;
	}
	return null;
};

Cookies.clear = function(name) {
  if(Cookies.get(name)){
    document.cookie = name + "=" +
    "; expires=Thu, 01-Jan-70 00:00:01 GMT";
  }
};

Cookies.getCookieVal = function(offset){
   var endstr = document.cookie.indexOf(";", offset);
   if(endstr == -1){
       endstr = document.cookie.length;
   }
   return unescape(document.cookie.substring(offset, endstr));
};

Ext.main = {
	addItems : function(items){
		var tabpanel=new Ext.TabPanel({
								activeTab: 0,
								border:false,
								items:items
							}); 
		var viewport = new Ext.Viewport({
							layout:"fit",
							border:false,
							items: [tabpanel],
							listeners:{
							   render:function(){
							        Ext.get('loading').remove();
							   }
							}
						});		
		return tabpanel;				
	},
	maximize : function(){
		parent.window.index.menuLayout.collapse();	
	},
	minimize : function(){
		parent.window.index.menuLayout.expand();	
	}
}


Ext.data.DWRProxy = function(dwrCall, pagingAndSort){
  Ext.data.DWRProxy.superclass.constructor.call(this);
  this.dwrCall = dwrCall;
  //this.args = args;
	this.pagingAndSort = (pagingAndSort!=undefined ? pagingAndSort : true);
};

Ext.extend(Ext.data.DWRProxy, Ext.data.DataProxy, {
  load : function(params, reader, callback, scope, arg) {
    if(this.fireEvent("beforeload", this, params) !== false) {
//      var sort;
//      if(params.sort && params.dir) sort = params.sort + ' ' + params.dir;
//      else sort = '';
      var delegate = this.loadResponse.createDelegate(this, [reader, callback, scope, arg], 1);
      var callParams = new Array();
//      if(arg.arg) {
//        callParams = arg.arg.slice();
//			}
			
//		if(this.pagingAndSort) {
//	      	callParams.push(params.start);
//	      	callParams.push(params.limit);
//	      	callParams.push(sort);
//			}
//		callParams.push(params.queryparams);
//		callParams.push(params.sqlpath);
        Ext.apply(arg.params,params);//arg.params 是系统load时所传参数, params是自定义参数
		callParams.push(arg.params);
      callParams.push(delegate);
      this.dwrCall.apply(this, callParams);
    } else {
      callback.call(scope || this, null, arg, false);
    }
  },

  loadResponse : function(listRange, reader, callback, scope, arg) {
    var result;
    try {
      result = reader.read(listRange);
    } catch(e) {
      this.fireEvent("loadexception", this, null, response, e);
      callback.call(scope, null, arg, false);
      return;
    }
    callback.call(scope, result, arg, true);
  },

  update : function(dataSet){},

  updateResponse : function(dataSet)
  {}
});

Ext.data.ListRangeReader = function(meta, recordType){
    Ext.data.ListRangeReader.superclass.constructor.call(this, meta, recordType);
    this.recordType = recordType;
};
Ext.extend(Ext.data.ListRangeReader, Ext.data.DataReader, {
  getJsonAccessor: function(){
      var re = /[\[\.]/;
      return function(expr) {
          try {
              return(re.test(expr))
                  ? new Function("obj", "return obj." + expr)
                  : function(obj){
                      return obj[expr];
                  };
          } catch(e){}
          return Ext.emptyFn;
      };
  }(),
	
	read : function(o){
		var recordType = this.recordType, fields = recordType.prototype.fields;

		//Generate extraction functions for the totalProperty, the root, the id, and for each field
		if (!this.ef) {
			if(this.meta.totalProperty) {
				this.getTotal = this.getJsonAccessor(this.meta.totalProperty);
			}
		
			if(this.meta.successProperty) {
				this.getSuccess = this.getJsonAccessor(this.meta.successProperty);
			}

			if (this.meta.id) {
				var g = this.getJsonAccessor(this.meta.id);
				this.getId = function(rec) {
					var r = g(rec);
					return (r === undefined || r === "") ? null : r;
				};
			} else {
				this.getId = function(){return null;};
			}
			this.ef = [];
			for(var i = 0; i < fields.length; i++){
				f = fields.items[i];
				var map = (f.mapping !== undefined && f.mapping !== null) ? f.mapping : f.name;
				this.ef[i] = this.getJsonAccessor(map);
			}
		}

   	var records = [];
   	var root = o.data, c = root.length, totalRecords = c, success = true;

   	if(this.meta.totalProperty){
	    var v = parseInt(this.getTotal(o), 10);
			if(!isNaN(v)){
				totalRecords = v;
			}
		}

		if(this.meta.successProperty){
			var v = this.getSuccess(o);
			if(v === false || v === 'false'){
				success = false;
			}
		}

		for(var i = 0; i < c; i++){
	    var n = root[i];
      var values = {};
      var id = this.getId(n);
      for(var j = 0; j < fields.length; j++){
				f = fields.items[j];
        var v = this.ef[j](n);						
        values[f.name] = f.convert((v !== undefined) ? v : f.defaultValue);
      }
      var record = new recordType(values, id);
      records[i] = record;
    }

    return {
       success : success,
       records : records,
       totalRecords : totalRecords
    };
  }
});

/**
 *Ext.ux.DwrStore 
 */
Ext.ux.DwrStore = function(method,cfg,uxcfg) {
	var config = {};
	var reader;
	if(uxcfg && uxcfg.headers){
		var recordType = Ext.data.Record.create(uxcfg.headers);
		var schema = {id: uxcfg.recordId||'idno',totalProperty: 'totalSize'};		
		reader = new Ext.data.ListRangeReader(schema,recordType);	
	}
	
	Ext.apply(config, {
		proxy: new Ext.data.DWRProxy(method, true),
		reader: reader,
		baseParams: cfg,
		remoteSort: (uxcfg && typeof uxcfg.remoteSort=='boolean') ? uxcfg.remoteSort:(cfg.paging ? true : false)
	});
	// call the superclass's constructor 
	Ext.ux.DwrStore.superclass.constructor.call(this, config);
};
Ext.extend(Ext.ux.DwrStore,Ext.data.Store);

/**
 *gridpanel封装  Ext.ux.gridPanel 
 */
Ext.ux.gridPanel=function(cfg){
   var cols = cfg.cols;
   var sqlpath = cfg.sqlpath;
   var paging = cfg.paging;
   var pageSize = cfg.pageSize;
   var method = cfg.method||DataSource.getGridData;
   var headers = new Array();
   var newcols=[];
   var uxConfig = {},pcfg = {};
   cfg.plugins=[];
   
   for(var i=0;i<cols.length;i++){
      var obj = {name:cols[i].dataIndex,mapping:cols[i].dataIndex};
      if(cols[i].type){
        obj.type=cols[i].type;
      }
      headers[headers.length]=obj;
   }
   uxConfig.headers = headers;
   uxConfig.remoteSort = cfg.remoteSort||cfg.paging;
   pcfg.sqlpath=sqlpath;
   pcfg.paging = paging;
   
   cfg.store = new Ext.ux.DwrStore(method,pcfg,uxConfig);
   if(cfg.rowNum){
   	var rowcfg=(typeof cfg.rowNum == "boolean") ? {} : cfg.rowNum;
     newcols.push(new Ext.grid.RowNumberer(rowcfg));  
   }
   if(cfg.checkBox){
   	var boxcfg = (typeof cfg.checkBox== 'boolean')?{}:cfg.checkBox;
     newcols.push((cfg.sm = new Ext.grid.CheckboxSelectionModel(boxcfg)));
   }
   for(var i=0;i<cols.length;i++){
      newcols[newcols.length]=cols[i];
   }
   cfg.colModel = new Ext.grid.ColumnModel(newcols);
   if(paging){
   var pagingbar = new Ext.PagingToolbar({
         store:cfg.store,
         pageSize:pageSize,
         displayInfo: true
    })
    cfg.bbar=pagingbar;
   }
   if(cfg.searchConfig){
      cfg.plugins.push(new Ext.ux.Search(cfg.searchConfig));	
   }
   if(cfg.summaryConfig){
      cfg.plugins.push(new Ext.ux.grid.GridSummary(cfg.summaryConfig));
   }
   Ext.ux.gridPanel.superclass.constructor.call(this, cfg);
}
Ext.extend(Ext.ux.gridPanel,Ext.grid.GridPanel,{
    load:function(params){
       if(params){
          if(typeof params=='string'){
             this.store.baseParams.queryparams=[params,'String'];
          }else if(Ext.isArray(params)){
             this.store.baseParams.queryparams=params;
          }else if(typeof params=='Object'){//sql加载查询   尚未处理
             Ext.apply(this.store.baseParams,params);
          }
       }
       if(this.paging){
        this.store.load({params:{start:0,limit:this.pageSize}});
       }else{
         this.store.load();
       }
    },
    getSelectedRows:function(cfg){
    	cfg = cfg||{};
        Ext.applyIf(cfg,{
           multiSelect:false,
           alertType:'suggest',
           err1:'请选择您所要操作的记录行',
           err2:'一次只能操作一条记录'
        });
        if(this.selModel.hasSelection()){
           var selectedNum = this.selModel.getCount();
           if(!cfg.multiSelect&&selectedNum>1){
             cfg.alertType=='suggest'?Msg.suggest('提示',cfg.err2):Msg.alert('提示',cfg.err2);
           }else{
           	 if(cfg.multiSelect){
           	      return this.selModel.getSelections();
           	 }else{
           	      return this.selModel.getSelected();
           	 }
           }
        }else{
           cfg.alertType=='suggest'?Msg.suggest('提示',cfg.err1):Msg.alert('提示',cfg.err1);
        }
    },
    getIdsFromSelectedRows:function(cfg){
    	cfg.multiSelect=cfg.multiSelect||true;
        var rs = this.getSelectedRows(cfg);
        if(rs){
        	var ids = [];
        	if(cfg.multiSelect){
           for(var i=0;i<rs.length;i++){
              ids[ids.length]=rs[i].data[cfg.id];
           }
         }else{
             ids[0]=rs.data[cfg.id];
         }
           return ids;
        }
    }
});

/**
 *Ext.ux.simpleCombo  封装
 * 
 */
Ext.ux.SimpleComboBox = function(cfg) {
	Ext.applyIf(cfg,{mode:'local'});//设置默认值
	if(cfg.sqlpath) cfg.mode='remote';
	if(cfg.data) cfg.mode='local';
	
	if(!cfg.sqlpath && cfg.mode=='remote')  {
		alert(cfg.name+'请设置sqlpath属性!');
		return;
	}
	if(cfg.mode=='local')  {
		if(!cfg.data || typeof cfg.data == "string"){
			cfg.data = Ext.ux.LocalData.get(cfg.data||cfg.name);
			if (!cfg.data) {
				alert(cfg.name+',请配置本地数据源数组!');
				return ;
			}
		}
	}	
	
    cfg.store = this.getMyStore(cfg);
	cfg.queryParam='queryValue';
	//cfg.emptyText= cfg.emptyText||'请选择';
	cfg.triggerAction= 'all';
	cfg.valueField='value';
	cfg.displayField='text';
	if(cfg.hideTrigger) cfg.readOnly=true;
	if(cfg.pageSize) cfg.minListWidth=250;
	
	if(cfg.mode=='local' && !cfg.value){
		cfg.value=cfg.store.getAt(0).data[cfg.valueField];//设置本地数据默认值
	}
	
	delete cfg.sqlpath;
	delete cfg.data;
	// call the superclass's constructor 
	Ext.ux.SimpleComboBox.superclass.constructor.call(this, cfg);
};

Ext.extend(Ext.ux.SimpleComboBox, Ext.form.ComboBox, {
	getMyStore: function(cfg){
		var store,uxConfig={headers:['value', 'text']};
		if(cfg.mode=='remote'){
			var method=DataSource.getComboData;
			var paging = cfg.pageSize ? (cfg.pageSize>0 ? true : false) :false;
			var config={
				paging:paging,sqlpath:cfg.sqlpath
			};
			if(cfg.headers){
				if(Ext.isArray(cfg.headers)){
				    for(var i=0;i<cfg.headers.length;i++){
				        uxConfig.headers[uxConfig.headers.length]=cfg.headers[i];
				    }
				}else{
				    uxConfig.headers[uxConfig.headers.length]=cfg.headers;
				}
			}
			store = new Ext.ux.DwrStore(method,config,uxConfig);				
		}else{
			store = new Ext.data.ArrayStore({
		        fields: ['value', 'text'],
		        data : cfg.data
		    });			
		}
		return store;
	}
})
Ext.reg('simplecombo',Ext.ux.SimpleComboBox);

/**
 * 前台表单数据的封装,自动将一个表单中的数据封装成一个js对象obj {}
 * 说明:
 * 1、对单选按钮radio,值为选中的按钮的inputValue,若inputValue为空,则默认为boxLabel
 * 2、对组合框combo,值为选中的值
 * 3、对复选框checkbox,值为选中的框的inputValue,若inputValue为空,则默认为boxLabel,多项以","分隔组成字符串
 * @param 表单对象
 */
Ext.ux.form = {
	getObjFromForm : function(form) {

		fields = form.getForm().items;
		var obj = {};
		var flag = true;// 特殊标记
		var checkboxValue = [];//保存复选框中的值
		var checkBoxName;//复选框对应字段名称

		for (var i = 0; i < fields.length; i++) {
			// 对应一个表单字段
			var field = fields.itemAt(i);
			var value = field.getValue();// 字段值
			var xtype = field.getXType();// 表单域类型

			if (xtype == 'radio') {// 单选处理
				if (flag) {
					if (value) {
						value = field.inputValue||field.boxLabel;
						flag = false;
						obj[field.name] = value;
					}
				}

			} else if (xtype == 'combo') {
				var index = field.store.find(field.valueField, value);// 根据属性名和值查找记录的位置
				if (index != -1) {
					var selItem = field.store.getAt(index);
					value = selItem.get(field.valueField);
					obj[field.name] = value;
				}
			} else if(xtype == 'checkbox'){
				if(value){//若选中
					checkBoxName = field.name;
					checkboxValue.push(field.inputValue||field.boxLabel)
				}
			}else{//其他类型
				obj[field.name] = value;
			}
		}
		obj[checkBoxName] = checkboxValue;

		return obj;
	}
};
分享到:
评论

相关推荐

    简单ext封装

    简单ext封装 封装了一个布局 封装文件中前面部分是封装部分 后面部分是对封装的使用

    extgrid 封装

    本文将详细讲解关于"ext grid 封装"的知识点,以及如何通过`grid.js`来实现UI的便捷调用。 1. ExtJS Grid组件: - Grid组件是ExtJS的核心组件之一,用于显示表格数据,支持排序、分页、筛选等多种功能。 - 它由一...

    EXT 通用动态Grid封装js

    对ext Grid进行了封装,动态加载数据源,动态生成列

    springboot+mybatis封装第二版

    在"mybatis-ext"这个文件中,可能包含了封装后的MyBatis扩展,如自定义的插件、拦截器、配置文件等。这些扩展可以进一步提升MyBatis的灵活性和可扩展性,满足特定项目的需求。 总的来说,"springboot+mybatis封装第...

    封装一个Ext消息提示框,显示几秒后自动消失

    封装 Ext 消息提示框,显示几秒后自动消失 本资源是关于封装一个 Ext 消息提示框,显示几秒后自动消失的知识点集合。该资源主要涵盖了 CSS 和 JavaScript 代码,旨在实现一个可以自动消失的消息提示框。 1. CSS ...

    封装EXT中grid的打印,多表头

    封装EXT中grid的打印,多表头,自动从grid的store取数,完成打印页面和生成,调用只需要一两句代码

    封装EXT中grid的打印,单表头

    封装EXT中grid的打印,单表头,自动从grid的store取数,完成打印页面和生成,调用只需要一两句代码

    ext PPT,EXT 教程,EXT 中文帮助手册,EXT 中文手册,ext_教程(入门到精通),Ext技术程序文档大全.

    学习EXT,不仅可以提升Web应用的用户体验,还能提高开发效率,因为EXT已经封装了许多复杂的功能,使开发者能更专注于业务逻辑的实现。在实际开发中,结合EXT的灵活性和强大的组件系统,可以创建出高效、动态且易于...

    Ext框架简介-Ext框架简介

    Ext框架简介 Ext框架简介是 Ajax 框架,可以用来开发带有华丽外观的富客户端应用,使得...底层 API 中提供了对 DOM 操作、查询的封装、事件处理、DOM 查询器等基础的功能。控件是指可以直接在页面中创建的可视化组件。

    tapestry4.02中封装ext的TabPanel组件

    在本文中,我们将深入探讨 Tapestry 4.02 框架中封装的 Ext TabPanel 组件。Tapestry 是一个开源的Java Web 应用程序开发框架,它允许开发者使用简单的Java类和模板语言来创建动态、交互式的Web应用。而 Ext 是一个...

    Ext API详解--笔记

    在`EXT核心API详解(二)-Array Date Function Number String.txt`中,Ext Js扩展了JavaScript的基本类型,提供了更强大的数组、日期、函数、数字和字符串处理功能。例如,你可以使用Ext的数组方法进行排序、查找、...

    Ext的Tab标签封装

    "Ext的Tab标签封装"指的是使用ExtJS库创建的TabPanel组件,它允许用户在一个区域内通过点击不同的标签来展示不同的内容面板。 在描述中提到的"兼容Firefox 和 IE浏览器",这意味着该封装方法考虑到了跨浏览器的兼容...

    ext2 grid 封装 (包含增删改查 导入导出等操作)

    标题 "ext2 grid 封装 (包含增删改查 导入导出等操作)" 暗示了这是一个关于ExtJS 2.x版本中Grid组件的封装实践,该封装集成了基本的数据操作功能,如添加(Add)、删除(Delete)、修改(Modify)和查询(Query)...

    Ext.tree.TreeLoader附带封装的json类

    在本文中,我们将深入探讨`Ext.tree.TreeLoader`与JSON数据在Ext JS框架中的应用。`Ext.tree.TreeLoader`是Ext JS库中的一个组件,它负责加载和解析树形结构的数据,而JSON(JavaScript Object Notation)则是一种轻...

    Ext.get与Ext.fly的区别

    - **内存占用**:由于`Ext.get`会将DOM元素封装成`Ext.Element`对象并缓存起来,因此可能会导致内存占用增加,尤其是在处理大量元素时。 - **资源消耗**:如果频繁使用`Ext.get`来获取相同的元素,则每次调用都会...

    Ext2.0 中文文档

    EXT2.0通过封装Ajax请求,简化了异步通信的过程,让开发者能更专注于业务逻辑。 EXT的核心是Element对象,它封装了DOM元素操作,提供了诸如选择、遍历、样式设置、事件处理等一系列功能。Element对象是EXT处理页面...

    ext.js监听事件

    ext封装的太死板,里面有常用到的15个ext.js触发事件和监听事件,对ext了解的不是特别深入,大部分都是经常碰到的

    EXT酒店管理实例EXT酒店管理实例

    EXT JS提供了一系列预先封装好的UI组件,如表格、面板、表单、树形视图等,这些组件具有高度可定制性,可以满足各种复杂的界面设计需求。通过EXT JS,开发者能够轻松构建出响应式和适应不同屏幕尺寸的Web应用。 在...

    国内首个基于Ext开发开源企业级框架Efsform

    这个UI 层封装extjs 框架,Ext 提供了好的 页面布局方式、功能强大的组件、优质的页面风格,但是如果直接使用Ext又是 较为复杂的,不仅要从头学习EXT 框架,而且Ext 是通过js 函数创建页面的, 这就不得不为每个页面...

    extapi

    "EXT核心API详解(二)-Array Date Function Number String.txt"主要讲解了EXT对JavaScript内置类型Array、Date、Function、Number和String的扩展。EXT对这些类型进行了增强,例如,Array增加了forEach、each等迭代...

Global site tag (gtag.js) - Google Analytics