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

Ext基本操作的封装

阅读更多
Ext.namespace('Ext.ux');
Ext.QuickTips.init(); // 按钮快捷提示初始化

/**
 * 封装 suggest显示
 */
Msg = Ext.MessageBox;
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 lb = Ext.get('lib-bar');
			if (lb) {
				lb.show();
			}
		}
	}
}();

Ext.apply(Ext.MessageBox, {
	suggest : Ext.ux.suggest.msg
});

/**
 * 返回一个Viewport
 */
Ext.main = {
	/**
	 * 创建一个ViewPort
	 */
	createViewPort : function(items) {
		var viewport = new Ext.Viewport( {
			layout : "fit",
			border : false,
			items : [items]
		});
		return viewport;
	}
	,

};

/**
 * 封装GridPanel
 */
Ext.dream = {
	
	/**
	 * 创建一个数据存储集
	 * cfg['url'] = 'server.jsp';
	 * cfg['recordName'] = "Menu"; 
	 * cfg['record'] = Menu; 
	 */
	createStore:function(cfg){
		// 定义信息数据集对象
		var dataStore = new Ext.data.Store( {
			autoLoad : false,
			url : cfg.url,
			reader : new Ext.data.XmlReader( {
				totalRecords : "totalNum",
				record : cfg.recordName
			}, cfg.record)
		// XmlReader结束
		});// 数据集对象创建结束
		return dataStore;
	},
	/**
	 * url:请求的地址 record:记录对象 tbar:顶部工具栏 columnModel:需要显示的列 pageSize:每页显示的记录数 
	 * var cfg = {};
	 * cfg['dataStore'] GridPanel的数据集
	 * cfg['tbar'] = topBar;
	 * cfg['columnModel'] = columnModel; 
	 * cfg['pageSize'] = 4; 
	 * cfg['sm'] = sm;配置列选择模式
	 */
	createGridPanel : function(cfg) {

		var pagingBar = new Ext.PagingToolbar( {
			store : cfg.dataStore,
			pageSize : cfg.pageSize,
			displayInfo : true,
			displayMsg : '第{0}条到第{1}条,一共{2}条',
			emptyMsg : "没有信息"
		});

		// 创建Grid表格组件
		var gridPanel = new Ext.grid.GridPanel( {

			border : false,
			width : Ext.get('box').getWidth(),
			frame : true,
			tbar : cfg.tbar,
			bbar : pagingBar,
			store : cfg.dataStore,
			stripeRows : true,
			viewConfig : {
				forceFit : true
			},
			sm : cfg.sm,// 列选择模式
			cm : cfg.columnModel
		});// 创建grid表格结束
		cfg.dataStore.load( {
			params : {
				start : 0,
				limit : cfg.pageSize
			}
		})
		return gridPanel;
	}
};

/**
 * 验证基类
 */
Ext.validate = {
	/**
	 * 判断是否选中了多条记录
	 * grid:表格对象
	 */
	selectedMore:function(grid){
		// 获取选中的复选框所表示的对象数组
		var records = grid.getSelectionModel().getSelections();
		// 若选中多条进行修改提示错误
		if (records.length != 1) {
			Ext.Msg.alert('提示', '<font color="red">只能选择一条记录</font>');
			return true;
		} else{
			return false;
		}
	},
	
	/**
	 * 判断是否未选中任何记录
	 */
	noSelected:function(grid){
		// 获取选中的复选框所表示的对象数组
		var records = grid.getSelectionModel().getSelections();
		// 若选中多条进行修改提示错误
		if (records.length == 0) {
			Ext.Msg.alert('提示', '<font color="red">请选择一条记录</font>');
			return true;
		} else {
			return false;
		}
	},
	
	/**
	 * 获取所有选中的记录的指定名称的值组成的字符串,以,隔开的
	 * name:列名
	 * grid:GridPanel对象
	 */
	getSelected:function(grid,name){
		// 获取选中的复选框所表示的对象数组
		var records = grid.getSelectionModel().getSelections();
		var res = "";
		for (i = 0;i < records.length; i++) {
			var one = records[i].get(name);//一条记录的列值
			if (i == records.length - 1) {
				res = res + one;
			} else {
				res = res + one + ",";
			}
		}
		return res;
	}
}

/**
 * 封装ComboBox,如 var cfg = {}; cfg['fieldLabel'] = '父菜单'; 标签 cfg['url']
 * ='comboServer.jsp'; 请求的url cfg['recordType'] = 'Menu', 记录类型 cfg['fields'] =
 * ['name','idno']; cfg['name'] = 'parentid';字段名称
 */
Ext.combo = {
	createComboBox : function(cfg) {
		var fields = new Array();
		fields = cfg.fields;
		var record = Ext.data.Record.create([ {
			name : fields[0]
			,
		}, {
			name : fields[1]
		}]);
		var myReader = new Ext.data.XmlReader( {
			totalRecords : "totalNum",
			record : cfg.recordType
			,
		}, record);

		var comboStore = new Ext.data.Store( {
			autoLoad : true,
			url : cfg.url,
			reader : myReader
		});

		var combo = new Ext.form.ComboBox( {
			fieldLabel : cfg.fieldLabel,
			store : comboStore,
			value : '请选择...',
			editable : false,// 不可编辑
			name : cfg.name,
			displayField : fields[0],// 显示的字段
			valueField : fields[1],// 实际值字段
			triggerAction : 'all'
		});
		return combo;
	}
};

/**
 * 数据相关的操作
 * @author 忧里修斯
 */
Ext.dao = {
	
	/**
	 * 前台表单数据的封装,自动将一个表单中的数据封装成一个js对象obj {} 
	 * 说明: 
	 * 1、对单选按钮radio,值为选中的按钮的boxLabel
 	 * 2、对组合框combo,值为选中的值 3、对复选框checkbox,值为选中的框的boxLabel,多项以","分隔组成字符串
	 */
	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.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.boxLabel)
				}
			} else {// 其他类型
				obj[field.name] = value;
			}
		}
		obj[checkBoxName] = checkboxValue;

		return obj;
	},
	
	/**
	 * 表单数据的加载
	 * cfg.form 要加载的表单对象
	 * cfg.url请求地址
	 */
	loadFormData:function(cfg){
		var formObj = cfg.form;
		formObj.form.load( {
			waitMsg : '加载中...',
			waitTitle : '提示',
			url : cfg.url,
			method : 'POST',
			failure : function(form, action) {
				Ext.Msg.alert('提示', '加载失败,原因为:' + action.failureType);
			}
		});
	}
};
2
0
分享到:
评论

相关推荐

    extgrid 封装

    - 代码封装是软件工程中的基本原则,它将复杂性隐藏在内部,对外提供简洁的接口。 - 对ExtJS Grid进行封装,可以减少重复代码,提高代码复用性和可维护性。 - 通过封装,开发者只需要关注业务逻辑,无需关心Grid...

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

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

    Ext与后台服务器的交互操作

    为了简化这一过程,开发者通常会封装一个专门用于CRUD操作的面板,这样不仅可以提高开发效率,还能确保界面的一致性和可维护性。 例如,在文中提到的CRUD面板是从Ext.Panel继承而来的。这里展示了一个简单的例子: ...

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

    3. **EXT 中文帮助手册**:这是一份详细的辅助学习材料,可能包含EXT框架的高级特性,如AJAX通信、图表组件、拖放操作、以及自定义组件的开发等内容。它能帮助开发者解决在实际项目中遇到的问题。 4. **EXT学习文档...

    Ext2.0 中文文档

    EXT2.0的学习路径建议从基本的Element操作和事件处理开始,逐步掌握Widgets的使用,然后深入到Ajax和数据管理,最后研究源码以提升对EXT框架的整体理解。通过实践和查阅相关资源,如推荐的中文网站和书籍,可以加快...

    Ext API详解--笔记

    `Ext.Element`是Ext Js中的基础元素操作类,它封装了对DOM元素的各种操作,如尺寸调整、样式修改、事件处理等。在`EXT核心API详解(三)-Ext.Element.txt`中,你将了解到如何选择元素、添加和移除CSS类、处理事件、...

    ext js 中文手册

    在Ext JS的学习路径上,初学者通常会从下载、安装框架开始,然后通过学习Ext的基本概念,如Element、Widgets、Ajax等,逐步过渡到布局的使用、Grid组件和Menu组件的创建,再到模板的使用和表单组件的构建,最后深入...

    Ext 操作数据库,对数据的增删改查,包括数据库,Ajax请求和store请求的设置

    总的来说,“ExtProject”是一个全面介绍Ext数据库操作和Ajax请求的实践项目,它将帮助初学者快速掌握Ext框架的核心功能,并了解前后端数据交互的基本流程。通过这个项目,你不仅可以学习到Ext的使用,还能进一步...

    ext-base.js

    4. **DOM操作**:EXT对DOM操作进行了封装,提供了便利的方法来查找、修改和操作DOM元素,使得开发者不必直接操作底层的JavaScript DOM API。 5. **动画效果**:EXT提供了一系列的动画效果,"ext-base.js"中包含了...

    extapi

    "EXT核心API详解(三)-Ext.Element.txt"涵盖了Ext.Element,它是EXT中表示DOM元素的抽象层,提供了丰富的操作DOM元素的方法,如样式设置、尺寸调整、事件监听等。Ext.Element还引入了动画效果,使得对DOM元素的操作...

    Ext用户UI界面优秀框架

    在描述中提到的“对javascript强封装大”,意味着Ext JS 将JavaScript的功能进行了高度抽象和模块化,封装了许多复杂的底层操作,使得开发者无需关心底层细节,只需关注业务逻辑和界面设计。这大大降低了开发难度,...

    ext 编程开发指南

    它封装了DOM操作,使得JavaScript开发者能够更加容易地访问和操作DOM元素。例如,可以轻松获取DOM节点、修改样式和触发事件等。 ##### 获取多个DOM的节点 使用EXT,可以通过简单的方法获取DOM节点,例如: ```...

    EXT中文手册,ext开发帮手

    EXT中的"Element"是其基础,它封装了DOM元素的操作,包括样式设置、尺寸调整、事件监听等,提供了更为便利的API接口,简化了对HTML元素的操作。 获取多个DOM的节点: EXT提供了便利的方法来选取和操作一组DOM节点,...

    Ext2.2 中文手册

    - **Element 类**:Ext 中的 Element 类提供了对 DOM 元素的封装,使得开发者可以更容易地操作 DOM。 - **获取 DOM 节点**:通过 `Ext.get` 或 `Ext.select` 方法可以轻松获取页面中的 DOM 元素。 - **响应事件**...

    EXT核心API详解(第一部分)

    2. **Ext.Element**:`Ext.Element`是EXT JS中的核心DOM操作类,它封装了对HTML元素的常见操作,如选择、遍历、样式设置、尺寸调整等。`Ext.get`和`Ext.fly`方法用于获取Element实例,`Ext.query`则类似于jQuery的`$...

    深入浅出ext js源码

    这部分内容可能涵盖了EXT JS的基本架构,包括核心类、事件处理、组件系统等关键模块。 `ext-2.1-tutorial-2009-03-19.rar`可能是EXT JS 2.1版本的教程资料,包含了该版本的示例代码和练习,这对于学习EXT JS的历史...

    Ext.Net1.0(Examples)RC2实例

    这个库主要针对Ext JS进行封装,为.NET开发者提供了一套完整的控件集和API,使得在ASP.NET环境中使用Ext JS的功能变得简单。RC2是Release Candidate 2的简称,表示这是一个接近正式版的测试版本,相较于RC1,它可能...

    ext学习文档

    Element是EXT框架的核心组成部分之一,它封装了DOM操作,提供了统一的接口来处理DOM元素。这使得开发者可以更加关注于业务逻辑而非底层DOM操作细节。 - **获取多个DOM的节点**: - 使用`Ext.get`方法可以获取DOM...

Global site tag (gtag.js) - Google Analytics