ExtJS の DataGrid で状態を保存
Ext JS にはコンポーネントの状態を保存する機能が用意されており、以下のように DataGrid でも事前に Ext.state.Manager に Ext.state.CookieProvider をセットしておけば、Cookie に DataGrid の状態が保存され、ページ更新時などに自動的に保存された状態が反映されるようになる。
Ext.onReady(function() { Ext.state.Manager.setProvider(new Ext.state.CookieProvider()); ・・・ grid = new Ext.grid.GridPanel({ ・・・ });
なお、デフォルトでは以下のような状態が保存される。
- 列の幅
- 列の並び順
- 列の表示有無
- ソートの情報(ソート対象の列とソートの向き)
また、状態を保存するタイミングは Ext.grid.GridPanel 生成時の stateEvents で指定することが可能で、stateEvents のデフォルト値は以下の 3つが設定される。
- columnmove
- columnresize
- sortchange
grid = new Ext.grid.GridPanel({ columns: [ ・・・ ], //列の順番と列幅を変更したときにだけ状態を保存するように設定 stateEvents: ["columnmove", "columnresize"], ・・・ });
更に、保存する状態は beforestatesave イベントの処理で変更する事ができ、状態はコンポーネントの id もしくは stateId(設定されていれば)をキーにして Provider に保存される。
<html> <head> <link rel="stylesheet" type="text/css" href="ext-2.0.1/resources/css/ext-all.css" /> <script type="text/javascript" src="ext-2.0.1/adapter/ext/ext-base.js"></script> <script type="text/javascript" src="ext-2.0.1/ext-all.js"></script> <script type="text/javascript"> <!-- Ext.BLANK_IMAGE_URL = "ext-2.0.1/resources/images/default/s.gif"; var grid = null; var cp = new Ext.state.CookieProvider({ //Cookie の有効期間を 30日に設定 expires: new Date(new Date().getTime() + (1000 * 60 * 60 * 24 * 30)) }); Ext.onReady(function() { Ext.state.Manager.setProvider(cp); ・・・ grid = new Ext.grid.GridPanel({ columns: [ ・・・ ], stateEvents: ["columnmove", "columnresize"], ・・・ }); grid.addListener('beforestatesave', function(thisGrid, state) { //ソートデータを保存しないように設定 state.sort = null; }); grid.render('grid-sample'); }); //保存されている状態をクリアする function clearSavedState() { cp.clear(grid.id); } //--> </script> </head> <body> <div id="grid-sample"></div> <hr /> <input type="button" value="状態のクリア" onclick="clearSavedState()" /> </body> </html>