1

ページにjqGridがある場合、それを拡張して追加のパラメーターを渡したいと思います。これまでの私の最善の試み:

...
    $('[role=grid]').jqGrid('setGridParam', { 'serializeGridData':MyGridOnBeforeRequest });

    function MyGridOnBeforeRequest (postData) {
        var newPostData = $.extend(postData, {
            specialParam: "foo"
        });
        return $.param(newPostData);
    }
...

jqGrid は、jQuery の ajax 処理に対する変更を無視するように見えるため、このようにしています。

ありがとう。

4

2 に答える 2

4

一般に、投稿したコードは機能し、次のグリッドのリロード時に新しいコードserializeGridDataが使用されます。

serializeGridData投稿された方法で使用するのは少し奇妙です。postData代わりにパラメーターを使用するだけで十分です。

var postData = $('#grid').jqGrid('getGridParam', "postData");
$.extend(postData: {specialParam: "foo"});

さらに、元のコードでは、元の$.extend(postData, {specialParam: "foo"});変更するpostDataものを使用します。悪くはありませんが、一般的にコード

function myGridOnBeforeRequest (postData) {
    return $.extend({}, postData, {specialParam: "foo"});
}

あるいは

function myGridOnBeforeRequest (postData) {
    return $.extend(true, {}, postData, {specialParam: "foo"});
}

よりきれいになります。の使用は実際に$.paramは必要ありません。オブジェクトを返すと、jQuery.ajax が$.param自動的に を呼び出します。

postDataもう 1 つの非常に一般的な方法は、次のようなパラメーターを使用してグリッドを直接定義することです。

postData: {
    specialParam: function () { return "foo"; }
}

関数にさらに多くのロジックを実装できるように、関数の本体内の外側の scote からいくつかの変数を使用したり、ページに存在するコントロールからいくつかの値を取得したりできます (詳細については、こちらを参照してください)。を使用せずに動的 に実装できる場合。specialParamgetGridParam

最後の発言。すでに の色myGridOnBeforeRequest(質問の の色と比較してMyGridOnBeforeRequestください) から、別の方法で解釈されることがわかります。関数の名前が大文字で始まる場合は、新しいクラスのコンストラクターMyGridOnBeforeRequestを定義する一般的に使用される名前変換に対応することを意味します。次のように使用する必要がありvar test = new MyGridOnBeforeRequest();ますnew。と比較するだけvar now = new Date();です。標準の JavaScript 名変換を保持することを強くお勧めします。

于 2012-05-29T10:24:46.230 に答える
1

あまり変更されない設定になる場合は、 次の$.jgrid.defaultsようなものを使用してに追加できます

function getSpecialParam()
{
    return 'foo';
}
$.jgrid.defaults = $.extend($.jgrid.defaults,
    {
        postedData:{
            specialParam:getSpeicalParam
        }
    });
于 2012-05-29T10:31:21.617 に答える