- 浏览: 2235 次
- 性别:
- 来自: 镇江
最近访客 更多访客>>
文章分类
最新评论
-
seven_cuit:
用Ext自带的状态管理器是最方便的
Ext.Grid之记录用户使用习惯—隐藏列 -
showker:
受用,谢谢。不过自己写也无坏处,培养一下思维能力。
Ext.Grid之记录用户使用习惯—隐藏列 -
yiminghe:
前面最开头设置 Ext.state.Manager.setPr ...
Ext.Grid之记录用户使用习惯—隐藏列 -
atian25:
<div class="quote_title ...
Ext.Grid之记录用户使用习惯—隐藏列 -
atian25:
setHidden : function(colIndex, ...
Ext.Grid之记录用户使用习惯—隐藏列
Ext.Grid的强大功能想必用过Ext的都体会到,可以隐藏列,可以拖放,可以排序等等,但是如果用户隐藏了某一些列后,下次登录时还是要看到上次隐藏后的列该怎么办呢?这就涉及到一个用户使用习惯的问题。想到记录用户习惯,当然首选使用Cookie。但是问题来了,在什么时候记录Cookie?什么事件触发后我们去写Cookie?其实最完美的当然就是在隐藏列这一事件(暂且叫它事件吧,具体的我也不太清楚Ext隐藏列的原理)触发时把剩下的列写入Cookie,但是小生才疏学浅,没有找到这个“隐藏列”事件,没法重写,只好另辟蹊径。反反复复试了Grid自带的方法比如:Close,BeforeClose,打算在用户关闭Grid的时候记录,但是没有效果,最后才找到beforedestroy这一事件,匪夷所思,关闭grid的时候不是触发beforeclose或者close,偏偏来个beforedestroy(英文就是摧毁,销毁),难道是Ext的人的命名习惯?不解。说到这里思路就清楚了,实现原理及步骤如下:
1、在用户关闭Grid时,触发BeforeDestroy事件,判断那些列是隐藏的,写入Cookie:
2、用户再次打开这个页面时先用Ajax读Cookie中的隐藏列,然后调用HiddenColumn函数,执行隐藏列。
欢迎各位批评指正。如果有更好的实现方法,请您不吝赐教。
附上完整的JS文件吧,后台aspx,cs文件就不贴了,有需要联系我
TotalJS.js
http://www.iteye.com/topic/458411
1、在用户关闭Grid时,触发BeforeDestroy事件,判断那些列是隐藏的,写入Cookie:
grid.on("beforedestroy", CloseWriteCookie, grid); // 按用户习惯,隐藏某列 if (boolHasClosedGrid == false)// 首次浏览 { HiddenMyColumn(grid, varHiddenColumn); // alert(varHiddenColumn); } // 关闭grid但未关闭浏览器 else { HiddenMyColumn(grid, varHiddenColumnColseGrid); }
1//写入CooKie事件 2 3function CloseWriteCookie(obj) { 4 var cms = obj.getColumnModel(); // 获得网格的列模型 5 var strHiddenColoumnIndex = "";// 存储当前网格已经显示的列名(列名之间用 "," 分隔) 6 // alert(cms.getColumnCount()); 7 for (var i = 0; i < cms.getColumnCount(); i++) {// 处理当前显示的列 8 9 if (cms.isHidden(i) && cms.getDataIndex(i) != "") {// 判断是否是隐藏列 10 strHiddenColoumnIndex += Ext.util.Format.trim(i) + ",";// 获得列序号数字从0开始 11 } 12 } 13 // 把隐藏列存到Cookie中的同时返回隐藏列的值。 14 Ext.Ajax.request({ 15 timeout : 3000000, 16 url : '/ajax/SetUserColumnCookie.aspx', 17 params : "ParaCkUserColumn=Write&UserHiddenColumn=" 18 + strHiddenColoumnIndex, 19 success : function(response, options) { 20 Ext.MessageBox.hide(); 21 varHiddenColumnColseGrid = response.responseText// 把最新的隐藏列赋值给全局变量varHiddenColumnColseGrid 22 // alert(varHiddenColumnColseGrid); 23 boolHasClosedGrid = true;// 设置关闭grid但未关闭浏览器为真 24 }, 25 failure : function(response, options) { 26 Ext.Msg.alert('错误', Ext.util.JSON 27 .decode(response.responseText).data.msg); 28 29 } 30 } 31 32 ) 33} 34 35
2、用户再次打开这个页面时先用Ajax读Cookie中的隐藏列,然后调用HiddenColumn函数,执行隐藏列。
Ext.Ajax.request({ timeout : 3000000, url : '/ajax/SetUserColumnCookie.aspx', params : "ParaCkUserColumn=Read", success : function(response, options) { Ext.MessageBox.hide(); varHiddenColumn = response.responseText // alert(varHiddenColumn); }, failure : function(response, options) { Ext.Msg.alert('错误', Ext.util.JSON.decode(response.responseText).data.msg); } }) 1 // 隐藏列函数 2 function HiddenMyColumn(vargrid, varColumnIndex) { 3 4 if (varColumnIndex != "") { 5 var cms = vargrid.getColumnModel(); // 获得网格的列模型 6 var strarrayUserColumn = new Array(); 7 strarrayUserColumn = varColumnIndex.split(","); 8 for (var i = 0; i < strarrayUserColumn.length; i++) { 9 cms.setHidden(strarrayUserColumn[i], true);// 隐藏列模型 10 } 11 } 12 }
欢迎各位批评指正。如果有更好的实现方法,请您不吝赐教。
附上完整的JS文件吧,后台aspx,cs文件就不贴了,有需要联系我
TotalJS.js
var ds; var varHiddenColumn = ""; var boolHasClosedGrid = false; Ext.Ajax.request({ timeout : 3000000, url : '/ajax/SetUserColumnCookie.aspx', params : "ParaCkUserColumn=Read", success : function(response, options) { Ext.MessageBox.hide(); varHiddenColumn = response.responseText // alert(varHiddenColumn); }, failure : function(response, options) { Ext.Msg.alert('错误', Ext.util.JSON.decode(response.responseText).data.msg); } }) function QueryWebTraceByAll() { var varDefaultState = ""; Ext.BLANK_IMAGE_URL = 'extjs/resources/images/default/s.gif'; Ext.QuickTips.init(); // var fm = Ext.form; var sm = new Ext.grid.CheckboxSelectionModel(); var cm = new Ext.grid.ColumnModel([new Ext.grid.RowNumberer(), sm, { header : '编号', width : 40, dataIndex : 'Id', sortable : true }, { header : '域名', width : 100, dataIndex : 'HostName', renderer : change, sortable : true }, { header : '流量', width : 50, dataIndex : 'PageView', sortable : true }, { header : '测试域名', width : 100, dataIndex : 'TestHostName', renderer : change, sortable : true }, { header : '服务器IP', width : 140, dataIndex : 'WebSpace', sortable : true }, { header : '空间用户名', width : 100, dataIndex : 'WebSpaceUserName', sortable : true }, { header : '空间名', width : 100, dataIndex : 'WebSpaceNumber', sortable : true }, { header : "Ftp密码", width : 100, dataIndex : 'FtpPwd', sortable : true }, { header : '备案号', width : 140, dataIndex : 'BeiAn', sortable : true },// renderer:renderFoo, { header : '域名服务商', width : 140, dataIndex : 'HostNameSP', sortable : true },// renderer:renderFoo, { header : '域名注册时间', width : 140, dataIndex : 'HostNameRegDate', sortable : true },// renderer:renderFoo, { header : '域名到期时间', width : 140, dataIndex : 'HostNameExpireDate', sortable : true },// renderer:renderFoo, { header : '类型', width : 50, dataIndex : 'WebType', sortable : true }, { header : '主关键字', width : 100, dataIndex : 'KeyWords', sortable : true }, { header : '副关键词', width : 100, dataIndex : 'SubKeyWords', sortable : true }, { header : '状态', width : 100, dataIndex : 'State', sortable : true }, { header : '分配人', width : 100, dataIndex : 'Assumer', sortable : true }, { header : '制作人', width : 40, dataIndex : 'Producer', sortable : true }, { header : '模板', width : 56, dataIndex : 'Template', sortable : true }, { header : '负责人', width : 40, dataIndex : 'Maintainer', sortable : true }, { header : '组长', width : 40, dataIndex : 'TeamLeader', sortable : true }, { header : '维护人51la', width : 65, dataIndex : 'MaintainerStatisId', sortable : true }, { header : '网站51la', width : 51, dataIndex : 'StatisId', sortable : true }, { header : '密码', width : 45, dataIndex : 'MaintainerFivelaPwd', sortable : true }, { header : '收录', width : 30, dataIndex : 'Baidu', sortable : true }, { header : '分配时间', width : 100, dataIndex : 'ToTeamLeaderDate', sortable : true }, { header : '制作时间', width : 100, dataIndex : 'StartDoDate', sortable : true }, { header : '完成时间', width : 100, dataIndex : 'EndDoDate', sortable : true }, { header : '审核时间', width : 100, dataIndex : 'CheckDate', sortable : true }, { header : '组员评分', width : 100, dataIndex : 'Score', sortable : true }, { header : '分配人评分', width : 100, dataIndex : 'AssumerScore', sortable : true }, { header : '综合评分', width : 100, dataIndex : 'TotalScore', sortable : true }]); // proxy直接去读取josn数据【 ds = new Ext.data.Store({ proxy : new Ext.data.HttpProxy({ url : 'WebTask/WebsiteGeneral/ShowWebSiteAsZWToLeader.aspx' }), reader : new Ext.data.JsonReader({ totalProperty : 'totalProperty', root : 'Head', successProperty : 'success' }, [{ name : 'Id', mapping : 'Id', type : 'int' }, { name : 'HostName', mapping : 'HostName', type : 'string' }, { name : 'TestHostName', mapping : 'TestHostName', type : 'string' }, { name : "FtpPwd", mapping : "FtpPwd", type : "string" }, { name : 'WebSpaceNumber', mapping : 'WebSpaceNumber', type : 'string' }, { name : 'WebSpaceUserName', mapping : 'WebSpaceUserName', type : 'string' }, { name : 'BeiAn', mapping : 'BeiAn', type : 'string' }, { name : 'State', mapping : 'State', type : 'string' }, { name : 'WebSpace', mapping : 'WebSpace', type : 'string' }, { name : 'Assumer', mapping : 'Assumer', type : 'string' }, { name : 'HostNameSP', mapping : 'HostNameSP', type : 'string' }, { name : 'HostNameRegDate', mapping : 'HostNameRegDate', type : 'string' }, { name : 'HostNameExpireDate', mapping : 'HostNameExpireDate', type : 'string' }, { name : 'MaintainerStatisId', mapping : 'MaintainerStatisId', type : 'string' }, { name : 'StatisId', mapping : 'StatisId', type : 'string' }, { name : 'MaintainerFivelaPwd', mapping : 'MaintainerFivelaPwd', type : 'string' }, { name : 'Baidu', mapping : 'Baidu', type : 'string' }, { name : 'PageView', mapping : 'PageView', type : 'string' }, { name : 'WebType', mapping : 'WebType', type : 'string' }, { name : 'KeyWords', mapping : 'KeyWords', type : 'string' }, { name : 'SubKeyWords', mapping : 'SubKeyWords', type : 'string' }, { name : 'StartTaskDate', mapping : 'StartTaskDate', type : 'string' }, { name : 'CheckDate', mapping : 'CheckDate', type : 'string' }, { name : 'StartDoDate', mapping : 'StartDoDate', type : 'string' }, { name : 'EndDoDate', mapping : 'EndDoDate', type : 'string' }, { name : 'TeamLeader', mapping : 'TeamLeader', type : 'string' }, { name : 'Maintainer', mapping : 'Maintainer', type : 'string' }, { name : 'Producer', mapping : 'Producer', type : 'string' }, { name : 'Template', mapping : 'Template', type : 'string' }, { name : 'ToTeamLeaderDate', mapping : 'ToTeamLeaderDate', type : 'string' }, { name : 'ToTeamDate', mapping : 'ToTeamDate', type : 'string' }, { name : 'Score', mapping : 'Score', type : 'string' }, { name : 'AssumerScore', mapping : 'AssumerScore', type : 'string' }, { name : 'TotalScore', mapping : 'TotalScore', type : 'string' }]), remoteSort : true }); var store = new Ext.data.Store({ proxy : new Ext.data.HttpProxy({ url : "WebTask/WebsiteGeneral/GetEmployeeAsGroup.aspx?type=z" }), // 数据源 reader : new Ext.data.JsonReader({ totalProperty : "totalPorperty", root : "Head", successProperty : 'success', fields : [{ name : 'id', mapping : 'id', type : 'string' }, { name : 'username', mapping : 'username', type : 'string' }] }) // 如何解析 }); store.load(); var storeddl = new Ext.data.Store({ proxy : new Ext.data.HttpProxy({ url : "WebTask/WebsiteGeneral/GetParaList.aspx?MenuId=0010" }), // 下拉框数据源 reader : new Ext.data.JsonReader({ totalProperty : "totalPorperty", root : "Head", successProperty : 'success', fields : [{ name : 'ParaName', mapping : 'ParaName', type : 'string' }, { name : 'ParaValue', mapping : 'ParaValue', type : 'string' }] }) // 如何解析 }); // 状态数据集,非数据库 var DdlState = new Ext.data.SimpleStore({ fields : ['ParaName', 'ParaValue'], data : [['所有', ''], ['准备制作', '准备制作'], ['正在制作中', '正在制作中'], ['已制作完成', '已制作完成'], ['已审核', '已审核'], ['已分配给组长', '已分配给组长'], ['已分配给组员', '已分配给组员']] }); storeddl.load(); // 网站制作状态静态数据 var liebie = new Ext.form.ComboBox({ id : 'dropdownliststate', emptyText : '请选择网站制作状态', mode : 'local', // 数据模式,local为本地模式 readOnly : true, hidden : true, displayField : 'ParaName', valueField : 'ParaValue', triggerAction : 'all', name : 'identity', // 作为form提交时传送的参数 store : DdlState, listeners : { select : { fn : function(combo, record, index) { // 先清理数据 ds.removeAll(); ds.baseParams = { paraname : grid.topToolbar.items.items[0].value, paravalue : record.get('ParaValue') }; ds.load({ callback : function(r, options, success) { if (success == false) { // 如果没有数据就清空 ds.removeAll(); Ext.MessageBox.alert('提示', 'Sorry,没有符合条件的数据'); } } }); ds.reload({ params : { start : 0, limit : 20 } }); } } } }); var grid = new Ext.grid.EditorGridPanel({ renderTo : 'grid3', ds : ds, sm : sm, stripeRows : true, cm : cm, width : 700, height : 280, loadMask : true, tbar : new Ext.Toolbar({ items : [new Ext.form.ComboBox({ id : 'ComSearch', emptyText : '请选择搜索项目', mode : 'remote', // 数据模式,local为本地模式 readOnly : true, displayField : 'ParaName', valueField : 'ParaValue', triggerAction : 'all', name : 'identity', // 作为form提交时传送的参数 store : storeddl, listeners : { select : { fn : function(combo, record, index) { if (record.get('ParaValue') == 'State') { liebie.show(); Ext.get('txtsearchword') .setDisplayed('none'); Ext.get('btnSearch') .setDisplayed('none'); } else { liebie.hide(); Ext.get('txtsearchword') .setDisplayed('block'); Ext.get('btnSearch') .setDisplayed('block'); } } } } }), // 网站状态静态数据 liebie, new Ext.form.TextField({ id : 'txtsearchword', fieldLabel : '搜索文字', width : 150, name : 'SearchWord', allowBlank : false, blankText : '请输入搜索文字', listeners : { specialKey : function(field, e) { if (e.getKey() == Ext.EventObject.ENTER) { ds.removeAll(); ds.baseParams = { paraname : grid.topToolbar.items.items[0].value, paravalue : Ext.get('txtsearchword').dom.value }; ds.load({ callback : function(r, options, success) { if (success == false) { Ext.MessageBox.alert('提示', 'Sorry,没有符合条件的数据'); } } }); ds.reload({ params : { start : 0, limit : 20 } }); } } } }), { id : 'btnSearch', text : '搜索', iconCls : 'search', handler : function() { ds.removeAll(); ds.baseParams = { paraname : grid.topToolbar.items.items[0].value, paravalue : Ext.get('txtsearchword').dom.value }; ds.load({ callback : function(r, options, success) { if (success == false) { // 如果为空就清空原来数据 Ext.MessageBox.alert('提示', 'Sorry,没有符合条件的数据'); } } }); ds.reload({ params : { start : 0, limit : 20 } }); } }] }), bbar : new Ext.PagingToolbar({ pageSize : 20, store : ds, displayInfo : true, displayMsg : '显示第 {0} 条到 {1} 条记录,一共 {2} 条', emptyMsg : "没有记录", items : [{ text : '导出Excel', iconCls : 'add', tooltip : "点击导出Excel文件", handler : function() { // 导出Excel文件 var cms = grid.getColumnModel(); // 获得网格的列模型 var strColoumnNames = "";// 存储当前网格已经显示的列名(列名之间用 "," 分隔) var strColoumnNamesHeader = ""; var strAllSql = ""; for (var i = 0; i < cms.getColumnCount(); i++) {// 处理当前显示的列 if (!cms.isHidden(i) && cms.getDataIndex(i) != "") {// 判断是否是隐藏列及是否列名为空(因为如果有选择框和默认序号,则为空) strColoumnNames = Ext.util.Format.trim(cms .getDataIndex(i));// 获得列名 // 判断是否是综合评分这列,如果是要把列名换成原始的 strColoumnNamesHeader = escape(Ext.util.Format .trim(cms.getColumnHeader(i)));// 获得列标题 strAllSql += strColoumnNames + " as " + strColoumnNamesHeader + ",";// 拼接Sql查询语句,格式 // 字段 as // 中文标题 } } // self表示在本窗口打开 var varparaname = grid.topToolbar.items.items[0].value; var varparavalue = Ext.util.Format.trim(Ext .get('txtsearchword').dom.value); var varparanametext = Ext.get('ComSearch').dom.value var gridtoexcelwindow; if (typeof(varparaname) == "undefined") { varparaname = "State"; varparavalue = varDefaultState; varparanametext = "默认首要业务数据"; } gridtoexcelwindow = window .open( "Ajax/GridToExcel.aspx?sql=" + strAllSql + "&FromTable=WebTrace&ParaName=" + escape(varparaname) + "&ParaNameText=" + escape(varparanametext) + "&ParaValue=" + escape(varparavalue), "_self", "menubar=0,scrollbar=0,resizable=0,channelmode=0,location=0,status=0"); gridtoexcelwindow.focus(); } }] }) }); // el:指定html元素用于显示grid grid.render();// 渲染表格 // ds.baseParams = { paraname : 'State', paravalue : varDefaultState }; ds.load({ callback : function(r, options, success) { if (success == false) { ds.removeAll(); Ext.MessageBox.alert('提示', 'Sorry,没有符合条件的数据'); } } }); ds.reload({ params : { start : 0, limit : 20 } }); var win = new Ext.Window({ layout : 'fit', maximizable : true, collapsible : true, width : 1000, height : 600, modal : true, title : "公共查询界面:在这里您可以查询您需要的网站并可以导出所需数据<br/><font color='#FF0000'><b>小提示:<br/>1、您可以点击任一列名右侧出现的箭头,在出现的下拉框中,隐藏某些您不需要的列。您再次进入此页面时将保持您上次保留的列。<br/>2、搜索支持回车键。<br/>3、在窗体底部有'导出Excel'按钮,你可以导出您需要的数据</b></font>", items : grid }); win.show(); grid.on("afteredit", afterEdit1, grid); grid.on("beforedestroy", CloseWriteCookie, grid); // 按用户习惯,隐藏某列 if (boolHasClosedGrid == false)// 首次浏览 { HiddenMyColumn(grid, varHiddenColumn); // alert(varHiddenColumn); } // 关闭grid但未关闭浏览器 else { HiddenMyColumn(grid, varHiddenColumnColseGrid); } } // 隐藏列函数 function HiddenMyColumn(vargrid, varColumnIndex) { if (varColumnIndex != "") { var cms = vargrid.getColumnModel(); // 获得网格的列模型 var strarrayUserColumn = new Array(); strarrayUserColumn = varColumnIndex.split(","); for (var i = 0; i < strarrayUserColumn.length; i++) { cms.setHidden(strarrayUserColumn[i], true);// 隐藏列模型 } } } // 关闭时写cookie function CloseWriteCookie(obj) { var cms = obj.getColumnModel(); // 获得网格的列模型 var strHiddenColoumnIndex = "";// 存储当前网格已经显示的列名(列名之间用 "," 分隔) // alert(cms.getColumnCount()); for (var i = 0; i < cms.getColumnCount(); i++) {// 处理当前显示的列 if (cms.isHidden(i) && cms.getDataIndex(i) != "") {// 判断是否是隐藏列 strHiddenColoumnIndex += Ext.util.Format.trim(i) + ",";// 获得列序号数字从0开始 } } // 把隐藏列存到Cookie中的同时返回隐藏列的值。 Ext.Ajax.request({ timeout : 3000000, url : '/ajax/SetUserColumnCookie.aspx', params : "ParaCkUserColumn=Write&UserHiddenColumn=" + strHiddenColoumnIndex, success : function(response, options) { Ext.MessageBox.hide(); varHiddenColumnColseGrid = response.responseText// 把最新的隐藏列赋值给全局变量varHiddenColumnColseGrid // alert(varHiddenColumnColseGrid); boolHasClosedGrid = true;// 设置关闭grid但未关闭浏览器为真 }, failure : function(response, options) { Ext.Msg.alert('错误', Ext.util.JSON .decode(response.responseText).data.msg); } } ) } // 编辑时的检验是否合法,不合法不更新 function afterEdit1(obj) { var r = obj.record;// 获取被修改的行 var l = obj.field;// 获取被修改的列 var o = obj.originalValue; var id = r.get("Id"); var lie = r.get(l); Ext.Ajax.request({ url : '/Ajax/WebsiteOper.aspx?type=3', params : "id=" + id + "&name=" + l + '&value=' + lie }); var cursor = this.getBottomToolbar().cursor; ds.load({ params : { start : cursor, limit : this.getBottomToolbar().pageSize } }); } function DEL(Obj) { var cursor = Obj.getBottomToolbar().cursor; ds.load({ params : { start : cursor, limit : Obj.getBottomToolbar().pageSize } }); }
评论
6 楼
seven_cuit
2009-09-04
用Ext自带的状态管理器是最方便的
5 楼
showker
2009-08-31
受用,谢谢。不过自己写也无坏处,培养一下思维能力。
4 楼
yiminghe
2009-08-27
前面最开头设置
Ext.state.Manager.setProvider(new Ext.state.CookieProvider());
grid 直接设置 stateful 和 stateId 就可以了
stateId : String
The unique id for this component to use for state management purposes (defaults to the component id if one was set, o...
The unique id for this component to use for state management purposes (defaults to the component id if one was set, otherwise null if the component is using a generated id).
stateful : Boolean
A flag which causes the Component to attempt to restore the state of internal properties from a saved state on startu...
A flag which causes the Component to attempt to restore the state of internal properties from a saved state on startup. The component must have either a stateId or id assigned for state to be managed. Auto-generated ids are not guaranteed to be stable across page loads and cannot be relied upon to save and restore the same state for a component.
Ext.state.Manager.setProvider(new Ext.state.CookieProvider());
grid 直接设置 stateful 和 stateId 就可以了
stateId : String
The unique id for this component to use for state management purposes (defaults to the component id if one was set, o...
The unique id for this component to use for state management purposes (defaults to the component id if one was set, otherwise null if the component is using a generated id).
stateful : Boolean
A flag which causes the Component to attempt to restore the state of internal properties from a saved state on startu...
A flag which causes the Component to attempt to restore the state of internal properties from a saved state on startup. The component must have either a stateId or id assigned for state to be managed. Auto-generated ids are not guaranteed to be stable across page loads and cannot be relied upon to save and restore the same state for a component.
3 楼
atian25
2009-08-27
showker 写道
有人说Ext里本来就自带一个cookie机制,叫 Ext.state.Manager.setProvider(new Ext.state.CookieProvider()),不知如何实现保存隐藏列的功能,有实现过的能否给点代码?谢谢。
http://www.iteye.com/topic/458411
2 楼
atian25
2009-08-27
setHidden : function(colIndex, hidden){
var c = this.config[colIndex];
if(c.hidden !== hidden){
c.hidden = hidden;
this.totalWidth = null;
this.fireEvent("hiddenchange", this, colIndex, hidden);
}
}
事件就是hiddenchange,是Ext.grid.ColumnModel的事件
var c = this.config[colIndex];
if(c.hidden !== hidden){
c.hidden = hidden;
this.totalWidth = null;
this.fireEvent("hiddenchange", this, colIndex, hidden);
}
}
事件就是hiddenchange,是Ext.grid.ColumnModel的事件
1 楼
showker
2009-08-26
有人说Ext里本来就自带一个cookie机制,叫 Ext.state.Manager.setProvider(new Ext.state.CookieProvider()),不知如何实现保存隐藏列的功能,有实现过的能否给点代码?谢谢。
相关推荐
`Ext.grid.GridPanel`是ExtJS中用于展示表格数据的核心组件之一。它提供了丰富的配置选项和方法来帮助开发者灵活地控制表格的表现形式及功能。对于初学者或者希望深入理解`GridPanel`特性的Web开发人员来说,掌握其...
var grid = new Ext.grid.GridPanel({ store: store, // 绑定数据存储 columns: [/* 定义列 */], plugins: [editor], // 使用 RowEditor 作为插件 title: 'My Grid', width: 500, height: 300, renderTo: ...
这篇文章的标题指出这是一个关于“Ext.grid.plugin.RowEditing”的重构,版本为v1.4,发布日期为2011年9月11日。重构通常意味着代码的改进,可能涉及性能优化、错误修复或功能增强。在4.0版本中,RowEditing插件的...
Ext.grid.EditorGridPanel是Ext JS库中的一个组件,主要用于创建具有可编辑单元格的表格。这个组件在数据展示和编辑方面提供了丰富的功能,是构建数据密集型应用的理想选择。下面将详细阐述其特点、工作原理及如何...
为了实现在数据刷新时滚动条位置不变的效果,我们需要对`Ext.grid.GridView`进行扩展或覆盖。具体做法是监听`beforerefresh`和`refresh`事件,在这些事件中记录并恢复滚动条的位置。 ##### 监听beforerefresh事件 ...
Ext.grid.ColumnModel显示不正常
Ext.ux.touch.grid-master 提供了触摸优化的滚动、筛选、排序、分页等功能,同时支持自定义列渲染和行为,使开发者可以创建出高度定制化的数据展示界面。 此压缩包中可能包含以下内容: 1. `README` 文件:通常包含...
- **资源消耗**:如果频繁使用`Ext.get`来获取相同的元素,则每次调用都会重新创建`Ext.Element`对象,这可能不是最优的做法。 #### 2. Ext.fly **定义**:`Ext.fly`是一种“飞量”模式,用于临时操作DOM元素。它...
1. Ext.grid.GridView:这是Ext Grid的基础视图组件,负责渲染表格的行和列。 2. Ext.grid.LockingGridView:这是扩展的GridView,增加了列锁定功能。 3. Ext.grid.plugin.GroupHeader:这是一个插件,用于创建多级...
首先,`Ext.grid.Grid`是Ext JS框架中的核心组件之一,它提供了一个可滚动、可排序、可分页的表格视图,用于展示大量结构化数据。Grid可以通过配置列模型、数据源和各种插件,实现高度定制化的数据展示。例如,我们...
在EXTJS框架中,`Ext.ux.form.LovCombo`是一种自定义组件,它扩展了基本的`Ext.form.field.ComboBox`,提供了更丰富的功能,尤其是针对多选和联动选择的需求。这个组件通常用于创建具有“lov”(即“Look Up Value”...
Ext.grid.GridPanel 删除线 放到example文件夹下运行
在Ext JS库中,`Ext.grid.plugin.RowExpander`是一个扩展插件,用于在网格行中添加可展开的详情区域。在Ext4.2版本中,用户可能遇到一个特定的问题,即`RowExpander`的`collapsebody`和`expandbody`事件无法正常触发...
EXT.form组件的事件处理也很重要,例如`Ext.form.TriggerField`的`onTriggerClick`事件,会在用户点击触发按钮时触发,通常用于执行下拉菜单的显示或隐藏操作。 EXT.form组件的灵活性和丰富性使得开发者可以轻松地...
在EXTJS库中,`Ext.Ajax.request`是用于发送Ajax请求的核心方法,它支持异步和同步操作。本文将详细解析如何利用`Ext.Ajax.request`实现同步请求,并探讨其背后的原理和注意事项。 首先,我们需要理解Ajax的本质,...
`Ext.data.Store`是ExtJS框架中用于管理数据的核心组件之一。它主要负责数据的存储、加载、更新等操作,并且提供了多种方法来方便地处理这些数据。本文将详细介绍`Ext.data.Store`的基本用法。 #### 二、创建Ext....
### Ext.form表单中各种属性应用详解 ...以上介绍了 **Ext.form** 表单中常见的几个组件及其配置选项,这些组件为 Web 应用程序提供了丰富的功能和用户体验。通过合理的配置,可以轻松构建出复杂且交互性强的表单界面。
为了实现窗口的动态弹出和隐藏,使用了`Ext.TaskMgr`进行定时任务管理。其中,`upTask`用于控制窗口向上移动,而`downTask`则用于控制窗口向下移动。这两个任务的执行间隔均为`moveSpeed`,单位为毫秒。 ##### 4. *...
org.restlet.ext.spring.jar