4

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

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

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

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

4

2 回答 2

4

我自己也遇到了这个问题,在拉了大约 2 个小时的头发后我才弄清楚了。

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

我想这里唯一的其他选择是去不同的州提供者。我将看看 Saki 慷慨提供的httpProvider作为替代方案。

编辑:

我试图覆盖提供程序并在保存 cookie 时删除字符串转义。这将尺寸减小了约 50%。不过,我在尝试恢复时似乎无法使用它。我确信 Ext 作者这样做是有原因的,否则它没有意义,因为它使 cookie 膨胀了很多。这么多的黑客。

于 2013-05-08T01:10:35.583 回答
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
}));

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

于 2012-07-31T14:56:09.037 回答