1

我想在一页上使用几个 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]

当我浏览到 Object cVal is '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.cSetVal。我认为您实际上并不需要任何cSetValorcGetVal功能,而是可以使用getGridParamand setGridParam

要更改选项的值,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);答案显示了这种实现的示例,并讨论了该方法的一些优点和缺点。

更新:所以如果你真的需要使用这样的语法,$('#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
);

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