扩展jqGrid。自定义参数

时间:2013-04-08 13:22:06

标签: jqgrid

我想在一个页面上使用几个jqGrids。所有网格都具有特定功能。出于这个原因,我想扩展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方法中设置的值?

1 个答案:

答案 0 :(得分: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');$('#some-selector').jqGrid('getGridParam', 'cSetVal');或仅使用$('#some-selector')[0].p.cVal$('#some-selector')[0].p.cSetVal来访问参数。我认为您并不真正需要cSetValcGetVal个函数,而是可以使用getGridParamsetGridParam代替。

要更改cVal选项的值,如果它以abave方式定义,则可以使用

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

或只是使用

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

或者,您可以使用jQuery.data存储与$('#some-selector')相关联的所有数据。

如果您需要在$.jgrid.extend表单中使用需要调用的新方法,

$('#some-selector').jqGrid('cSetVal',value);会很有帮助。 The answer显示了这种实现的一个例子,并讨论了该方法的一些优点和缺点。

更新:因此,如果真的需要使用$('#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值,则只需在创建jqGrid的选项列表中包含cVal

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

更新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