ExtJS 3.4:网格不会自动保存和恢复状态。我究竟做错了什么?

时间:2012-07-31 14:22:43

标签: extjs extjs3

我有一个带有状态的Ext 3.4网格:true,一个stateId,并且列模型中的每一列都有一个id。

然而,当我调整列的大小时,我没有看到保存任何状态cookie,并且在重新加载页面时不会恢复列宽。 我确实有一个定义了cookie提供程序的状态管理器,我可以通过状态管理器设置/获取cookie值。

我还为beforestatesave和statesave添加了处理程序,并且它们正在被调用,但仍然 - 没有保存cookie并且没有恢复状态。这些处理程序也正在传递正确的参数 - columns参数在转储到控制台时显示正确的更新宽度。

我的问题是:我做错了吗?我不应该期望这是自动的吗? 我是否真的必须使用这些状态事件来手动保存和恢复状态?

2 个答案:

答案 0 :(得分:4)

我自己遇到了这个问题,经过大约2个小时的拔毛后才算出来。

你碰巧有一个相当大的网格吗?如果cookie数据超过4k,如果你有20多列数据,它将很容易做到,它将无法保存。它也不会出错。

我想这里唯一的另一个选择是去另一个州提供者。我将查看httpProvider Saki作为替代方案慷慨提供的{{3}}。

编辑:

我试图覆盖提供程序并在保存cookie时删除字符串转义。这使尺寸减小了约50%。我试图恢复时似乎无法消耗它。我确定Ext作者之所以这样做是出于某种原因,否则它就没有意义,因为它会使cookie膨胀太多。对于黑客来说太多了。

答案 1 :(得分:1)

要使GridPanel成为有状态,我只需在配置中添加stateful:true并在创建任何对象之前设置我的提供程序

Ext.state.Manager.setProvider(new Ext.state.CookieProvider({
   expires: new Date(new Date().getTime()+(1000*60*60*24*30)) // 30 days
}));

我没有测试它是否记得宽度,但尝试移动列和排序顺序,看看它们是否被记住。