グリッドの読み込み中に表示されるストックjqGrid「読み込み中...」オーバーレイをトリガーする方法を知っている人はいますか? jqueryプラグインをそれほど手間をかけずに使用できることは知っていますが、アプリケーションのルックアンドフィールをjqGridですでに使用されているものと一貫性を保つことができるようにしたいと思います。
私が見つけた最後のものはこれです:
jqGridは、テーブルの更新時/カスタム更新時にデフォルトの「読み込み中」メッセージを表示します
DisplayLoadingMessage()
関数のようなものを探している場合。 jqGridには存在しません。 jqGridのloaduiオプションはenable(デフォルト)、disable、またはblockにのみ設定できます。私は個人的にblockを好みます。 ( http://www.trirand.com/jqgridwiki/doku.php?id=wiki:options を参照)。しかし、それはあなたが望んでいたものではないと思います。
JqGridからの「Loading ...」メッセージが好きな場合にできる唯一のことは、同じメッセージを作成することです。ここでは、このメッセージを表示するためにjqGridが行うことを説明します。2つの非表示のdivが作成されます。 id = listのグリッドがある場合、このdivは次のようになります。
_<div style="display: none" id="lui_list"
class="ui-widget-overlay jqgrid-overlay"></div>
<div style="display: none" id="load_list"
class="loading ui-state-default ui-state-active">Loading...</div>
_
ここで、「Loading ...」または「Lädt...」(ドイツ語)というテキストは_$.jgrid.defaults.loadtext
_から来ています。 divのIDは、「lui_」または「load_」プレフィックスとグリッドID(「リスト」)から構築されます。 ajaxリクエストを送信する前に、jqGridはこのdivの1つまたは2つを表示します。 loaduiオプションがenableの場合、2番目のdiv(id = "load_list")に対してjQuery.show()
関数を呼び出します。ただし、loaduiオプションがblockの場合、.show()
に関して両方のdiv(id = "lui_list"とid = "load_list")が表示されます。関数。 ajaxリクエストの終了後.hide()
jQuery関数が1つまたは2つのdivに対して呼び出されます。それがすべてです。
すべてのcssクラスの定義は_ui.jqgrid.css
_または_jquery-ui-1.8.custom.css
_にあります。
これで、jqGridの「Loading ...」メッセージを再現するのに十分な情報が得られましたが、もし私があなただったら、本当にこれを実行したいかどうか、または jQuery blockUIプラグイン の方が良いかどうかをもう一度考えます。あなたの目標。
私が使う
$('.loading').show();
$('.loading').hide();
新しいdivを作成しなくても正常に動作します
簡単に、それを示すために:
$("#myGrid").closest(".ui-jqgrid").find('.loading').show();
それからそれを再び隠すために
$("#myGrid").closest(".ui-jqgrid").find('.loading').hide();
onSelectRow JQグリッドのイベントの行の下に配置しました。
$( '。loading')。show();
オーバーライドするスタイルは[.ui-jqgrid.loading]です。
$( "#load _")。show()および.hide()を呼び出すことができます。ここで、はグリッドのIDです。
@Olegが述べたように、 jQuery Block UI は、ajaxベースアプリケーションの開発中に多くの優れた機能を備えています。これを使用すると、UI全体または element Block と呼ばれる特定の要素をブロックできます。
JqGridの場合、グリッドをdiv(sampleGrid)に配置してから、次のようにグリッドをブロックできます。
$.extend($.jgrid.defaults, {
ajaxGridOptions : {
beforeSend: function(xhr) {
$("#sampleGrid").block();
},
complete: function(xhr) {
$("#sampleGrid").unblock();
},
error: function(jqXHR, textStatus, errorThrown) {
$("#sampleGrid").unblock();
}
}
});
$( 'div.loading')。show();で動作しています。これは他のコンポーネントでも役立ちます
$('#editDiv').dialog({
modal : true,
width : 'auto',
height : 'auto',
buttons : {
Ok : function() {
//Call Action to read wo and
**$('div.loading').show();**
var status = call(...)
if(status){
$.ajax({
type : "POST",
url : "./test",
data : {
...
},
async : false,
success : function(data) {
retVal = true;
},
error : function(xhr, status) {
retVal = false;
}
});
}
if (retVal == true) {
retVal = true;
$(this).dialog('close');
}
**$('div.loading').hide();**
},
Cancel : function() {
retVal = false;
$(this).dialog('close');
}
}
});
ブロックせず、組み込みのajax呼び出しを使用してデータを取得したくない場合
datatype = "local"
次のようにjqgrid関数を拡張できます。
$.jgrid.extend({
// Loading function
loading: function (show) {
if (show === undefined) {
show = true;
}
// All elements of the jQuery object
this.each(function () {
if (!this.grid) return;
// Find the main parent container at level 4
// and display the loading element
$(this).parents().eq(3).find(".loading").toggle(show);
});
return show;
}
});
その後、簡単な呼び出し
$("#myGrid").loading();
または
$("#myGrid").loading(true);
すべてのグリッドの負荷を表示するには(もちろん、グリッドごとにグリッドIDを変更します)または
$("#myGrid").loading(false);
同じページに複数のグリッドがある場合に特定のグリッドをターゲットにして、読み込み要素を非表示にします