`
tipx
  • 浏览: 108978 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

Extjs中GridPanel慎用cookie保存状态

阅读更多
最近在一个项目中,客户要求业务列表可定制(显示/隐藏、宽度设置、排序等),由于项目前期没有考虑对定制的规划,所以没考虑使用数据库或XML保存列表的状态属性来实现定制,而去寻找最小改动的方式来满足客户要求。

几经搜索,找到Extjs的GridPanel使用cookie可以很容易实现列表定制的保存,进行如下两步设置即可:

1.开启cookie
Ext.state.Manager.setProvider(new Ext.state.CookieProvider({expires: new Date(new Date().getTime()+(1000*60*60*24*365))})); //设置过期时间,这里设置一年


2.给相应的GridPanel添加两个参数
stateful:true, //true为启用cookie保存grid状态
stateId:"xxxx-cookie-grid" //这将被用于生成cookie的id


  经过上面两步设置后,定制功能实现了(在开启cookie的同个浏览器下),接着使用这种方式改造了项目中的其它业务列表、报表列表等。

  起初,由于不了解浏览器对cookie的大小等限制,且未对使用定制的列表同时进行测试,所以没有发现问题(有时清除浏览器缓存,将cookie一并清除了);

  后来同事在测试时,反馈在FF下整个系统都是空白页,连登录页都是空白(且有时在后台报出header之类超出服务器处理限制)。不知道是什么原因,让同事直接清空浏览器缓存、cookie后重试,系统又可以正常访问了。

  接着考虑是不是cookie的问题,上网搜索得知知浏览下cookie的限制:http://tipx.iteye.com/blog/849244
  ( 很无齿的转载了,备忘用。)

  进一步验证问题确实是出在cookie身上。打开FF的cookie查看窗口,找到系统所属的域,复制出其中一个grid所存储的cookie(cookie的名称是使用stateId加上前缀生成的,各浏览器应该类似),存为文本并查看大小,差不多1kb,而基本浏览器对一个域的大小限制为4kb,而项目中有远远不止4个列表使用了cookie存储状态。

  接着清空FF的cookie(清空当前域的即可),重新打开项目,定制一个grid、两个grid、三个grid,定制完刷新各页面皆正常;当定制生成第四个grid的cookie后,刷新项目的页面,页面全部变成空白,打开FF的cookie查看窗口,找到项目对应的cookie,删除其中一个grid的cookie后,再次刷新项目页面,页面恢复正常。

----------------------传说中腹黑的分害线---------------------
综上所述,由于Extjs的GridPanel在保存信息到cookie时,要保存的内容相对比较多(比如包含了:列索引、排序、显示/隐藏,还要算上字段个数等),很容易超出浏览器的cookie限制,所以GridPanel自带的cookie保存状态功能虽然好用,不过还是慎用为好。
2
1
分享到:
评论
6 楼 hongyang070 2011-07-29  
我也遇到这样的问题了.郁闷啊!!!
5 楼 tipx 2010-12-28  
kenken0y 写道
用HttpProvider不就可以了吗?

对HttpProvider没了解过,刚刚搜索了下,原来是插件,研究使用下,谢谢指教。
4 楼 kenken0y 2010-12-23  
并且还要加上这段才能用

Ext.override(Ext.grid.ColumnModel, {
    setState: function (col, state) {
        Ext.apply(this.lookup[col], state);
    }
});
3 楼 kenken0y 2010-12-23  
用HttpProvider不就可以了吗?
2 楼 tipx 2010-12-23  
doylecnn 写道
所以,解决方案在哪里?

  所以暂时还是只能用数据库或XML等其它方式,手动存/取GridPanel的字段信息.
1 楼 doylecnn 2010-12-22  
所以,解决方案在哪里?

相关推荐

    ExtJS的GridPanel导出excel文件

    ExtJS的GridPanel导出excel文件,方便快捷易懂!

    给Extjs的GridPanel增加“合计”行

    在GridPanel中添加“合计”行,主要涉及到View的自定义和数据处理。 1. **创建自定义View**: - 首先,我们需要创建一个继承自EXTJS的`Ext.grid.GridView`的自定义View类。这个类将覆盖默认的渲染逻辑,以便在表格...

    EXTJS_GridPanel_ColumnModel_列的宽度随数据变化而变化

    EXTJS的GridPanel是其组件库中的核心组件之一,用于展示数据网格,广泛应用于Web应用的数据展示。在EXTJS中,ColumnModel是用来定义GridPanel列结构和行为的关键部分。这篇博客"EXTJS_GridPanel_ColumnModel_列的...

    ExtJs GridPanel双击事件获得双击的行

    本篇文章将深入讲解如何在ExtJs GridPanel中实现双击事件,并获取双击的行以及选中的复选框状态。 首先,我们要了解GridPanel的基本结构。GridPanel由Store(数据存储)和ColumnModel(列模型)组成,它们定义了...

    EXTJS.GRIDPANEL 日期格式

    在深入探讨ExtJS.GridPanel中的日期格式设置之前,我们首先简要回顾一下ExtJS是什么以及GridPanel组件的基本功能。ExtJS是一个用JavaScript编写的开源框架,用于构建交互式的Web应用程序,它提供了丰富的UI组件和...

    Extjs2.02 Gridpanel

    EXTJS GridPanel 是EXTJS库中的核心组件之一,尤其在EXTJS 2.02版本中,它提供了强大的表格展示和交互功能,对于初学者来说极具学习价值。GridPanel不仅能够处理基本的表格操作,如单选、多选、排序、改变列宽等,还...

    Extjs让Gridpanel组件自动滚屏

    后来公司让改变一个Gridpanel的展现方式,要求实现滚屏的效果。于是我就开始找API相关的功能了。找了很久,也没有找到框架的相应控制方法,然后在网上找了很久,也没有找到有人给去示例,无奈就只能自己写JS来控制...

    汇总Extjs中GridPanel的各个属性与方法.doc.docx

    ExtJS 是一个强大的...以上就是 ExtJS 中 GridPanel 的一些核心属性和方法,它们共同构建了一个功能强大的数据展示和交互界面。在实际开发中,可以根据需求灵活配置和使用这些组件,以实现各种复杂的数据管理功能。

    Extjs 关于 cookie的操作

    在 Web 开发中,Cookie 是一种常用的数据存储方式,用于保存用户的一些基本信息或者状态,从而实现网站的个性化设置或登录状态保持等功能。Extjs 作为一种强大的 JavaScript 框架,提供了对 Cookie 操作的支持,使得...

    汇总Extjs中GridPanel的各个属性与方法.doc.pdf

    ExtJS中的GridPanel是用于展示数据的组件,它是一个强大的数据网格,提供了丰富的功能和定制选项。以下是对GridPanel的一些主要属性和方法的详细说明: **属性总结:** 1. **store**: 这个属性定义了GridPanel所...

    Extjs4 GridPanel 的几种样式使用介绍

    接下来,我们讨论一下GridPanel中的不同列类型。在实际应用中,我们可能需要处理不同类型的数据显示,例如: 1. **行号列**: 使用`Ext.grid.RowNumberer`,它可以自动为每一行生成序号。 2. **布尔值列**: 对于`...

    Extjs中的GridPanel

    GridPanel 通常与 Store 关联,Store 是一个内存中的数据集合,可以从中加载和保存数据。通过 Store,GridPanel 能够实时反映数据的更改。 3. **列配置**: 每个列都有自己的配置项,例如 `dataIndex` 用于关联...

    ExtJs GridPanel延时加载.rar

    在GridPanel中,当用户滚动到表格的底部或顶部时,延时加载会自动请求更多的数据。这种方式降低了初始页面加载时间,减少了服务器压力,同时提高了用户体验。实现延时加载通常需要设置Store的`autoLoad`属性为`false...

    Extjs入门教程(treePanel和GridPanel)

    6. 用户交互:实现拖放功能,允许用户通过拖动TreePanel的节点来调整结构,或者拖放到GridPanel中进行操作。 在"我自己写的Extjs入门教程"这个压缩包中,可能包含的文件可能有HTML示例文件、JavaScript代码文件、...

    ExtJs中gridpanel分组后组名排序实例代码

    GroupingView插件负责对GridPanel中的数据进行分组,并提供相应的用户界面元素以便用户可以通过组名展开或折叠数据。组名排序则涉及到Store中数据的排序规则,可以通过自定义GroupingStore来实现。 在示例中,定义...

    ExtJs 2.0 GridPanel+Struts2 with JSON plugin[更新代码]

    GridPanel 是 ExtJS 中的核心组件之一,它能够展示表格数据,并提供了排序、分页、筛选等多种功能。在 ExtJS 2.0 中,GridPanel 的配置和使用涉及到以下知识点: 1. **创建 GridPanel**:首先,你需要定义数据源,...

    ExtJS介绍以及GridPanel

    在本文中,我们将深入探讨ExtJS的核心特性,特别是其GridPanel组件。 首先,ExtJS的核心特性之一是组件化。它将网页元素抽象为可复用的组件,如按钮、表格、窗口等,每个组件都有自己的属性、方法和事件,可以方便...

    ExtJS 表格面板GridPanel完整例子

    ExtJS表格面板(GridPanel)是Sencha Ext JS框架中的一个核心组件,它用于展示大量结构化数据。在本文中,我们将深入探讨如何创建并使用一个完整的ExtJS GridPanel实例,以及与其相关的源码和工具。 首先,让我们...

Global site tag (gtag.js) - Google Analytics