Extjs4 でGridを触れなくしたい

たとえば、左にグリッド、右に明細を表示するような画面があるとする。

その場合、左のグリッドをクリックすると、
「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);
};

コメント

このブログの人気の投稿

ヨドバシカメラの店舗購入履歴を見るには…

C# の WPF の DataGrid で 行を交互に背景色を変える+選択色を変える+カラムが無い所も変える…

Visual Studio の ホットリロードが動かない場合に確認するところ