Extjs4 でGridを触れなくしたい
たとえば、左にグリッド、右に明細を表示するような画面があるとする。
その場合、左のグリッドをクリックすると、
「DBにデータを取りに行って、右に明細を表示する」という処理になるでしょう。
「DBにデータを取りに行って、右に明細を表示する」の間に
ユーザーがグリッドをクリックすると連続でリクエストが走り
重くなったり、整合性が取れずに冷害が発生する可能性があります。
で、Gridの更新以外でGridを触れなくする方法は、
「Ext.grid.Panel.getView().setLoading()」 に true を設定すればよい。
逆に、触れるようにするには、 false を設定すれば、触れるようになります。
が!
初期表示時に「Ext.grid.Panel.getView().setLoading(true)」を行うと、"クリックした時に選択されない。"
という事象が発生しました。
まぁ、初期表示時に画像を読んだり、グリッドの自動選択したり、
Ajaxを5・6回呼び出したりと…思い処理をたくさんやったんですがね(笑
その時の解決方法です。
のように、先にfalseを設定し、後にtrue を設定します。
こうすることにより、クリックしたのに選択されないっ!
ということが起こらなくなります。
ふしぎなぁ~~~
とりあえずメモとして…
******************サンプル**********************
その場合、左のグリッドをクリックすると、
「DBにデータを取りに行って、右に明細を表示する」という処理になるでしょう。
「DBにデータを取りに行って、右に明細を表示する」の間に
ユーザーがグリッドをクリックすると連続でリクエストが走り
重くなったり、整合性が取れずに冷害が発生する可能性があります。
で、Gridの更新以外でGridを触れなくする方法は、
「Ext.grid.Panel.getView().setLoading()」 に true を設定すればよい。
逆に、触れるようにするには、 false を設定すれば、触れるようになります。
が!
初期表示時に「Ext.grid.Panel.getView().setLoading(true)」を行うと、"クリックした時に選択されない。"
という事象が発生しました。
まぁ、初期表示時に画像を読んだり、グリッドの自動選択したり、
Ajaxを5・6回呼び出したりと…思い処理をたくさんやったんですがね(笑
その時の解決方法です。
Ext.grid.Panel.getView().setLoading(false);
Ext.grid.Panel.getView().setLoading(true);
のように、先にfalseを設定し、後にtrue を設定します。
こうすることにより、クリックしたのに選択されないっ!
ということが起こらなくなります。
ふしぎなぁ~~~
とりあえずメモとして…
******************サンプル**********************
tmp.readMapImage = function(){
// Gridを触れないようにする
extGrid.getView().setLoading(false); // これがみそっ!
extGrid.getView().setLoading(true);
// 画像ファイルパスを作成
var imageFileName = './a.gif';
// イメージの読み込み完了後、画像データを表示する
var mapImg = new Image();
mapImg.src = imageFileName;
// 画像読み込みが正常終了した場合の処理
mapImg.onload = function() { call : tmp.createImage(imageFileName,
mapImg.width,
mapImg.height);
};
// 画像読み込みが失敗した場合の処理
mapImg.onerror = function() {
// Gridを触れるようにする
extGrid.getView().setLoading(false);
};
// 画像読み込みをユーザーがCancelした場合の処理
mapImg.onabort = function() {
// Gridを触れるようにする
extGrid.getView().setLoading(false);
};
};
tmp.createImage = function( fileName, width, height ){
// ここで何かしら処理を行う。(僕はラファエルで画像を読み込んだ)
// データ取得用パラメータ作成
var params = new Object();
params.ID = 1
extStore.load( { params : params,
callback : tmp.createSymbolCallback
} );
};
tmp.createSymbolCallback = function(records, operation, success){
// ここでDBから読み込んだデータの処理を行う。
// Gridを触れるようにする
extGrid.getView().setLoading(false);
};
コメント
コメントを投稿