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をステートフルにするには、ステートフルを追加しました。オブジェクトを作成する直前に、構成に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 に答える