*模拟map */ Map = function(){ var mapAddM = { /** * entry函数 * @param {Object} key * @param {Object} val */ entry: function(key, val, flag){ this.key = key; this.value = val; this.flag = flag; }, //put方法 put: function(key, val, flag){ this.store[this.store.length] = new this.entry(key, val, flag); }, //get方法 get: function(key){ for (var i = 0; i < this.store.length; i++) { if (this.store[i].key === key) return this.store[i].value; } }, //get方法 getFlag: function(key){ for (var i = 0; i < this.store.length; i++) { if (this.store[i].key === key) return this.store[i].flag; } }, //remove方法 remove: function(key){ for (var i = 0; i < this.store.length; i++) { this.store[i].key === key && this.store.splice(i, 1); } }, //keyset keySet: function(){ var keyset = new Array; for (var i = 0; i < this.store.length; i++) keyset.push(this.store[i].key); return keyset; }, //valset valSet: function(){ var valSet = new Array; for (var i = 0; i < this.store.length; i++) valSet.push(this.store[i].value); return valSet; }, //flagSet flagSet: function(){ var flagSet = new Array; for (var i = 0; i < this.store.length; i++) flagSet.push(this.store[i].flag); return flagSet; }, //clear clear: function(){ this.store.length = 0; }, //size size: function(){ return this.store.length; }, /** * 迭代子 */ iterator: function(){ //TODO 待实现 var obj = this.keySet();//所有的key集合 var idx = 0; var me = { /** * 当前key */ current: function(){ return obj[idx - 1]; }, /** * 第一个key */ first: function(){ return obj[0]; }, /** * 最后一个key */ last: function(){ return obj[obj.length - 1]; }, /** * 是否还有下一个元素 */ hasNext: function(){ idx++; if (idx > obj.length || null == obj[obj.length - 1]) return false; return true; } }; return me; } }; for (var method in mapAddM) { this.store = new Array; Map.prototype[method] = mapAddM[method]; } } /** * 生成column * @param {Object} map */ function createColumns(map){ var columns = []; var i = 0; for (var it = map.iterator(); it.hasNext();) { var currentKey = it.current();//本次循环的key var currentVal = map.get(currentKey);//当前value var currentFlag = map.getFlag(currentKey);//判断是否隐藏该列 var columni = {}; columni.dataIndex = currentKey; columni.header = currentVal; columni.sortable = true; columni.width = 115; if ((currentFlag && (currentFlag == "hide"))) { columni.hidden = true; } columns.push(columni); i++; } return columns; } /** * 生成keyset集合 * @param {Object} map */ function createReaderColumns(map){ var columns = []; var i = 0; for (var it = map.iterator(); it.hasNext();) { var currentKey = it.current();//本次循环的key var columni = {}; columni.name = currentKey; columns.push(columni); i++; } return columns; } /** * 渲染extgrid */ var _pageSize = 15; function rendExtGrid(_url, _params, renderDiv, map){ jQuery("#" + renderDiv).html("");//清空已经存在的数据 /** * 读取数据代理 */ var proxy = new Ext.data.HttpProxy({ url: _url, method: "POST" }); /** * 记录 */ var record = Ext.data.Record.create(createReaderColumns(map)); /** * 解析数据的reader */ var reader = new Ext.data.JsonReader({ totalProperty: "Total", root: "Rows", }, record); /** * 数据源 */ var store = new Ext.data.Store({ proxy: proxy, reader: reader, //remoteSort:true,//全局排序 baseParams: { method: "POST", searchParam: JSON.stringify(_params) //查詢參數 } }); /** * 遮罩 */ var loadMarsk = new Ext.LoadMask(document.body, { msg: '正在加载数据……', disabled: false, store: store }); //分页工具栏 var pagingToolbar = new Ext.PagingToolbar({ pageSize: _pageSize, store: store, displayInfo: true, displayMsg: '第{0}-第{1}条,一共{2}条', emptyMsg: "无数据", hideBorders: true, cls:"pageBar",//自定义样式 items: ['-', { pressed: false, enableToggle: true, cls: 'x-btn-text-icon details', toggleHandler: function(btn, pressed){ var view = grid.getView(); view.showPreview = pressed; view.refresh(); } }] }); //创建grid var grid = new Ext.grid.GridPanel({ store: store, region: 'center', border:false, mode: "remote", columns: createColumns(map), frame: false, //表格外加边框 collapsible: true, animCollapse: false, sm: new Ext.grid.RowSelectionModel({ singleSelect: true }), iconCls: 'icon-grid' }); grid.on('load',function(){gridSpan(grid,'row','1px solid #8080FF');}); store.load({ params: { start: 0, limit: _pageSize} }); /** * 容器:为了能宽高自适应 */ var viewPort = new Ext.Panel({ layout: 'fit', renderTo: renderDiv, autoScroll: false, height:400, bbar: pagingToolbar, items: [grid] }); } //合并单元格的函数,合并表格内所有连续的具有相同值的单元格。调用方法示例:grid.on('load',function(){gridSpan(grid,'row','1px solid #8080FF');}); //参数:grid-需要合并的表格,rowOrCol-合并行还是列,borderStyle-合并后单元格分隔线样式 function gridSpan(grid, rowOrCol, borderStyle){ var array1 = new Array(); var count1 = 0; var count2 = 0; var index1 = 0; var index2 = 0; var aRow = undefined; var preValue = undefined; var firstSameCell = 0; var allRecs = grid.getStore().getRange(); if(rowOrCol == 'row'){ count1 = grid.getColumnModel().getColumnCount(); count2 = grid.getStore().getCount(); } else { count1 = grid.getStore().getCount(); count2 = grid.getColumnModel().getColumnCount(); } for(i = 0; i < count1; i++){ preValue = undefined; firstSameCell = 0; array1[i] = new Array(); for(j = 0; j < count2; j++){ if(rowOrCol == 'row'){ index1 = j; index2 = i; } else { index1 = i; index2 = j; } var colName = grid.getColumnModel().getColumnId(index2); if(allRecs[index1].get(colName) == preValue){ allRecs[index1].set(colName, ' '); array1[i].push(j); if(j == count2 - 1){ var index = firstSameCell + Math.round((j + 1 - firstSameCell) / 2 - 1); if(rowOrCol == 'row'){ allRecs[index].set(colName, preValue); } else { allRecs[index1].set(grid.getColumnModel().getColumnId(index), preValue); } } } else { if(j != 0){ var index = firstSameCell + Math.round((j + 1 - firstSameCell) / 2 - 1); if(rowOrCol == 'row'){ allRecs[index].set(colName, preValue); } else { allRecs[index1].set(grid.getColumnModel().getColumnId(index), preValue); } } firstSameCell = j; preValue = allRecs[index1].get(colName); allRecs[index1].set(colName, ' '); if(j == count2 - 1){ allRecs[index1].set(colName, preValue); } } } } grid.getStore().commitChanges(); //添加所有分隔线 for(i = 0; i < grid.getStore().getCount(); i ++){ for(j = 0; j < grid.getColumnModel().getColumnCount(); j ++){ aRow = grid.getView().getCell(i,j); aRow.style.borderTop = borderStyle; aRow.style.borderLeft = borderStyle; } } //去除合并的单元格的分隔线 for(i = 0; i < array1.length; i++){ for(j = 0; j < array1[i].length; j++){ if(rowOrCol == 'row'){ aRow = grid.getView().getCell(array1[i][j],i); aRow.style.borderTop = 'none'; } else { aRow = grid.getView().getCell(i, array1[i][j]); aRow.style.borderLeft = 'none'; } } } }
相关推荐
`Ext.grid.Grid`是Ext JS库中的一个组件,用于创建可交互的数据网格,而DWR(Direct Web Remoting)则是一种允许JavaScript和Java在浏览器端进行安全、高效通信的技术。本篇文章将深入探讨如何利用这两者结合,实现...
本文将详细讲解关于"ext grid 封装"的知识点,以及如何通过`grid.js`来实现UI的便捷调用。 1. ExtJS Grid组件: - Grid组件是ExtJS的核心组件之一,用于显示表格数据,支持排序、分页、筛选等多种功能。 - 它由一...
Ext JS 是一个强大的JavaScript库,专门用于构建富客户端Web应用程序。这个库以其丰富的用户界面组件、数据绑定功能和可扩展性而闻名。Ext JS 提供了一整套预先封装的组件,如表格、面板、菜单、按钮、表单、树形...
在EXT Grid中,DWR提供了对XMLHttpRequest的封装,使得开发者无需直接操作这个对象,而是通过更友好的接口进行操作。 总结来说,"ext grid json分页显示"是通过EXT.js的Grid组件结合DWR的Ajax能力,实现前端数据的...
在Ext JS这个强大的JavaScript框架中,开发人员经常需要创建数据展示组件,比如Grid,来显示大量数据并提供交互性。Grid List是Grid的一种扩展,它不仅具有基本的表格功能,还可以进行更复杂的操作。本教程将详细...
Ext JS是一个基于JavaScript的开源前端框架,用于构建跨浏览器的动态Web应用。其最显著的特点是提供了一套丰富的用户界面组件,这些组件在外观和感觉上都极为吸引人,非常适合构建富客户端(Rich Internet ...
在实践中,封装Ext2 Grid通常涉及以下步骤: 1. **定义Store**: Store是Grid的数据源,需要配置URL以连接到后端服务器获取或提交数据。可能涉及到JSONP或者Ajax请求,以及远程排序和分页。 2. **创建Columns**: ...
EXT JS是一种基于JavaScript的开源框架,专为Web应用程序的界面开发而设计。它提供了一套丰富的UI组件,支持复杂的用户交互,并简化了AJAX交互的实现过程。通过EXT JS,开发者可以轻松构建具有高度响应性和用户友好...
EXT JS 3.2.0是一款历史悠久且功能强大的JavaScript库,专用于构建富客户端Web应用程序。这个版本包含了大量的示例(demo)、API文档以及源代码,对于开发者来说是一份宝贵的资源,可以帮助他们深入理解EXT JS的工作...
在Web应用开发中,数据的存储与传输是核心环节,尤其在富客户端(Rich Internet Application, RIA)开发中,JavaScript库Ext JS提供了强大的数据管理功能。本文将围绕Ext JS的数据存储与传输展开详细讲解。 首先,...
在Tapestry 4.02中封装Ext的GridPanel组件,意味着开发者将ExtJS的GridPanel功能集成到Tapestry应用中,使Tapestry应用能够利用GridPanel的强大功能。这个过程通常涉及到以下几个关键步骤: 1. **引入ExtJS库**:...
此外,Ext Js 2.02对Ajax请求进行了封装,提供了易于使用的Ajax类(Ext.Ajax),支持异步数据交互。开发者可以通过简单的API调用来发送GET、POST请求,处理服务器返回的数据,实现页面的动态更新。 在数据存储和...
- 文件名"Autogrid.js"暗示可能是一个自动创建Grid的函数或类。它可能封装了上述的一些步骤,提供一个便捷的方法来快速生成Grid,尤其是当数据结构不确定或频繁变化时。 7. **源码分析** - 分析`Autogrid.js`的...
在EXT JS这个强大的JavaScript框架中,开发者们常常需要创建丰富的用户界面,以提供直观的数据展示。"Ext扩展控件,可以用图片显示百分之多少"的标题揭示了一个特定的EXT控件功能,它允许将表格(grid)中的百分比...
在描述中提到的“对javascript强封装大”,意味着Ext JS 将JavaScript的功能进行了高度抽象和模块化,封装了许多复杂的底层操作,使得开发者无需关心底层细节,只需关注业务逻辑和界面设计。这大大降低了开发难度,...
EXT(Ext JS)是一个强大的JavaScript库,用于构建现代化的Web应用程序。它提供了丰富的用户界面组件、数据处理能力以及与服务器端进行交互的功能。对于初学者和想要深入了解EXT的人来说,本文档旨在提供一个简明...
Ex4.0共2个压缩包特性,《ext js权威指南》 前 言 第1章 ext js 4开发入门 / 1 1.1 学习ext js必需的基础知识 / 1 1.2 json概述 / 3 1.2.1 认识json / 3 1.2.2 json的结构 / 3 1.2.3 json的例子 / 4 1.2.4 ...
EXT JS提供了自己的类系统,但其本质仍是对JavaScript的封装和扩展。 在压缩包文件中,"EXT 教程"可能包含一系列的HTML文件,这些文件可能包含了EXT JS的实例代码和讲解文字。通过阅读这些文件,你可以了解到EXT JS...
《深入浅出Ext JS(第2版)》是一本专门探讨Ext JS这一JavaScript框架的权威书籍,其配套代码库包含了作者为了阐述各种概念和技术而编写的示例代码。Ext JS是一个用于构建富客户端Web应用程序的JavaScript库,尤其...