1

1 つのページで複数の jqGrid を使用したい。すべてのグリッドには特定の機能があります。このため、jqgrid を拡張したい

$.jgrid.extend({
    cVal: false,
    cSetVal: function(value) {
        var $t = this;

        $t.cVal = value;
        console.log('Setting cVal');
        return this;
    },
    cGetVal: function(value) {
        var $t = this;
        console.log('Getting cVal');

        return $t.cVal;
    },
});

ページの読み込み後、Firefox コンソールを使用してテストします

>>> $('#some-selector').jqGrid.cVal;

false

したがって、jqGrid はデフォルト値を返します。

>>> $('#some-selector').jqGrid('cSetVal', 'abc');

Setting cVal //console.log returns
Object[table#some-selector.some-class]

オブジェクトを参照すると、cVal は「abc」です

しかし

>>> $('#some-selector').jqGrid('cGetVal', 'abc');

Getting cVal //console.log returns

false

もう一度デフォルト値を取得します:( cSetVal メソッドで設定された値を取得するにはどうすればよいですか?

4

1 に答える 1

4

申し訳ありませんが、「jqGridの拡張」の目的がよくわかりません。jqGrid で追加情報を保持する必要がある場合は、標準の jqGrid パラメータのリストにない追加パラメータを使用できます。たとえば、次を使用してグリッドを作成する場合

$('#some-selector').jqGrid({
    url: "someUrl",
    datatype: "json",
    ... // other standard jqGrid parameters
    cVal: false,
    cSetVal: function(value) {
        console.log('cSetVal');
    }
);

$('#some-selector').jqGrid('getGridParam', 'cVal');and を使用して、 $('#some-selector').jqGrid('getGridParam', 'cSetVal');または単に$('#some-selector')[0].p.cValandを使用してパラメーターにアクセスできます$('#some-selector')[0].p.cSetValcSetValorcGetVal関数は本当に必要なく、代わりに and を使用できると思いgetGridParamますsetGridParam

オプションの値を変更するcValには、上記の方法で定義されている場合に使用できます

$('#some-selector').jqGrid('setGridParam', {cVal: true});

または単に使用する

$('#some-selector')[0].p.cVal = true;

または、 jQuery.dataを使用して、 に関連付けられたデータを保存することもできます$('#some-selector')

$.jgrid.extendフォームで呼び出す必要がある新しいメソッドが必要な場合に役立ちます$('#some-selector').jqGrid('cSetVal',value);回答では、そのような実装の例を示し、アプローチの利点と欠点について少し説明します。

UPDATED : したがって、次のような構文を本当に$('#some-selector').jqGrid('cSetVal',value);使用する必要がある場合は、コードを次のように変更する必要があります。

$.jgrid.extend({
    cSetVal: function(value) {
        console.log('Setting cVal');

        $(this).jqGrid('setGridParam', {cVal: value});
        return this;
    },
    cGetVal: function(value) {
        console.log('Getting cVal');

        return $(this).jqGrid('getGridParam', 'cVal');
    }
});

cValグリッドの値を初期化する必要がある場合cValは、作成中に jqGrid のオプションのリストに含める必要があります。

$('#some-selector').jqGrid({
    url: "someUrl",
    datatype: "json",
    ... // other standard jqGrid parameters
    cVal: true // HERE
);

UPDATED 2 :私の回答の最初の部分で提案したようにメソッドを定義する場合は、次の方法でメソッドを使用する必要があります。

var $grid = $('#some-selector');

// create the grid
$grid.jqGrid({
    url: "someUrl",
    datatype: "json",
    ... // other standard jqGrid parameters
    cVal: false,
    cSetVal: function(value) {
        console.log('in cSetVal()');

        //this.p.cVal = value;
        $(this).jqGrid('setGridParam', {cVal: value});
    },
    cGetVal: function() {
        console.log('in cGetVal()');

        //return this.p.cVal;
        return $(this).jqGrid('getGridParam', 'cVal');
    }
);

// now we can use cVal, cSetVal and cGetVal
var cSetVal = $grid.jqGrid("getGridParam", "cSetVal"),
    cGetVal = $grid.jqGrid("getGridParam", "cGetVal"),
    cVal = $grid.jqGrid("getGridParam", "cVal"); // get cVal value
cSetVal.call($grid[0], true); // change cVal value
cVal = $grid.jqGrid("getGridParam", "cVal");// get modified cVal value
cSetVal.call($grid[0], false);// change cVal value
cVal = cGetVal.call($grid[0]);// get modified cVal value
于 2013-04-08T14:33:30.467 に答える