【发布时间】:2015-07-30 20:40:14
【问题描述】:
我的表单中有多个 jqGrid。现在对于我的表单中的多个 jqGrid,我通过包含一个 js 文件来实现它,该文件具有 jqGrid 定义的内容,并且该 js 文件的内容如下:
var MyGridData = MyGridData || (function () {
var _args = {};
return {
init: function (Args){
_args = Args;
},
initiateGrid: function (){
this.fillGridSchema(_args[6]);
},
fillGridSchema: function (){
$('#' + _args[0]).jqGrid({
url: _args[1],
datatype: "json",
mtype: "POST",
ajaxGridOptions: {contentType: 'application/json; charset=utf-8' },
serializeGridData: function(postdata){
return JSON.stringify(postdata);
},
postData: {colOrder: _args[2], data: _args[3]},
search: true,
colNames: _args[4],
colModel: _args[5],
viewrecords: true,
pager: jQuery('#pager_' + _args[7]),
rowNum: 10,
rowList: [10, 20, 30, 40],
//further required jqGrid properties here for ex: sortorder, //loadonce, gridview, ignorecase, etc.
onSelectRow: function (rowId) {
if(_args[8] != ''){
var rowData = jQuery(this).getRowData(rowId);
var fn = window[_args[4]];
if(typeof fn === 'function'){
fn(rowData);
}
}
}
});
}
}
}
现在为生成 jqGrid,调用以下代码:
MyGridData.init([
'GridName1', 'griddataurl', 'colOrder', 'postDataargs', 'colNames', 'colModel', 'ExtraParams', 'pager', 'onSelectRowfunction'
]);
MyGridData.initiateGrid();
现在我面临的问题是,我在第一个网格的 rowselect 上填充我的第二个网格,并且我正在以编程方式默认选择我的网格中的第一行。 So when the first row of 1st grid is being selected, then I am calling a function in onSelectRow of 1st grid so as to fill my 2nd grid as per the selection in my first grid in that function.但问题是 _args 参数只在第一次被调用时向我显示了第一个网格的参数。第二次调用第一个网格的 onSelectRow 时,它显示 _args 参数具有第二个网格参数的值,而不是第一个网格的参数。我无法找出其中的问题。如果有人能找出其中的问题,请告诉我解决方案。
【问题讨论】:
-
您写了关于 两个网格,但我只看到一个调用
MyGridData.init和MyGridData.initiateGrid。此外,onSelectRow使用未定义的fn变量。说实话,我不喜欢你发布的代码。它使简单的事情非常不利于阅读和理解。_args[5]的代码非常不利于阅读(没有名字 - 没有意义)。方法initiateGrid与fillGridSchema执行相同的操作,并且两者只能调用一次。对不起,批评家,但我认为你应该完全重写代码以使其易于使用和理解。 -
顺便说一下,您使用字符串值
'colNames', 'colModel'作为_args[4]和_args[5]参数,所以您将拥有colNames: 'colNames', colModel: 'colModel',这是绝对错误的。colNames和colModel的值应该是包含相应类型项的数组,而不是字符串。 -
@Oleg 我通过以下两个调用来生成我的两个网格:
MyGridData.init([ 'GridName1', 'griddataurlforGrid1', 'colOrderforGrid1', 'postDataargsforGrid1', 'colNamesGrid1', 'colModelGrid1', 'ExtraParamsGrid1', 'pager', 'onSelectRowfunctionforGrid1' ]); MyGridData.initiateGrid();MyGridData.init([ 'GridName2', 'griddataurlforGrid2', 'colOrderforGrid2', 'postDataargsforGrid2', 'colNamesGrid2', 'colModelGrid2', 'ExtraParamsGrid2', 'pager', '' ]); MyGridData.initiateGrid(); -
考虑我为我的每个网格提供必要的不同参数,我只需要为我的第一个网格调用 onSelectRow,这就是为什么我为第二个网格提供''(空白)参数。跨度>
-
我之前写过你使用
fn变量(不是_args[8]之类的东西)。所以'onSelectRowfunctionforGrid1'或''的用法没有区别。而且'onSelectRowfunctionforGrid1', ``colNamesGrid1','colModelGrid1'`等表示strings,但是你可能有objects对应的名字和使用方式对象而不是名称作为参数。不是吗?
标签: javascript jquery jqgrid mvcjqgrid