我想在一个页面上使用几个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方法中设置的值?
答案 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
来访问参数。我认为您并不真正需要cSetVal
或cGetVal
个函数,而是可以使用getGridParam
和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);
会很有帮助。 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