如何从jqgrid中的子网格访问父网格ID
我正在构建一个工作正常的jqgrid ……网格结构
if (jqent.isReq) { sbGrid.Append("subGrid: true,"); sbGrid.Append("subGridRowExpanded: function (subgrid_id, row_id) {"); sbGrid.Append(" $('#' + subgrid_id).html(renderhtmlforSubgrid(subgrid_id, row_id));},"); }
我有一个带有textarea的子网格和一个将由下面的代码呈现的图像控件
function renderhtmlforSubgrid(subgrid_id, row_id) { var script = ''; script += ''; script += ''; script += ''; return script; }
点击图片“RenderModalPopup”function将被触发
function RenderModalPopup(rowid, tableid, event) { var dataFromRow = $('#tblArtifact1').jqGrid('getRowData', rowid); var PhaseArtifactId = $('#tblArtifact1').jqGrid('getCell', rowid, 'ID'); ..........................
每件事都运行良好……现在问题是我将网格ID硬编码为“tblArtifact1”来获取列值。 需要删除。 我可以获得网格ID吗? 是否有任何预定义的参数/function来获得它?
我被困了……请帮忙。
在回调函数subGridRowExpanded
您可以使用this
变量初始化为网格的DOM(
DOM)。 所以你可以通过this.id
获得父网格的this.id
。 如果你在subGridRowExpanded
调用renderhtmlforSubgrid
,我会建议你使用
renderhtmlforSubgrid.call(this, subgrid_id, row_id)
代替
renderhtmlforSubgrid(subgrid_id, row_id)
在这种情况下, renderhtmlforSubgrid
函数内部不会更改为全局window
对象,你可以拥有它为你保存有用的信息(比如this.id
用于id或$(this)
用于jQuery说唱歌手到父网格)。
我建议你考虑在子网格中使用idPrefix
选项来防止id重复(有关更多信息,请参阅答案 )。
此外,我从您的代码中看到,您是更多C#/ C ++开发人员,而不是JavaScript开发人员。 两年前我遇到了同样的问题。 JavaScript有一些与众所周知的其他语言很接近的结构,但深层语义确实不同。 因此,JavaScript开发人员有许多标准陷阱,他以错误的方式使用现有结构。
例如:您不应该使用变量,属性或特别是以大写字母开头的函数。 目前RenderModalPopup
和PhaseArtifactId
违反规则。 JavaScript没有类,但可以使用函数创建紧密结构。 在函数内部,您可以this
指定属性。 这些函数是“类”的构造函数,应该有第一个大写字母。 要创建“类”的实例,应该使用new
。 例如var now = new Date();
。
闭包是JavaScript中函数的另一个例子,它看起来像函数,但有很多重要的区别。
另外我建议你使用更多的匿名函数和函数表达式( var renderhtmlforSubgrid = function (subgrid_id, row_id) {...}
)而不是函数语句( function renderhtmlforSubgrid (subgrid_id, row_id) {...}
)并定义所有函数体的第一行中的变量。 JavaScript 没有像大多数计算机语言那样的块级变量声明 ,因此如果要在JavaScript代码中定义变量,则很容易产生错误的代码。
最后的建议是使用Kernighan和Ritchie的 JavaScript代码格式代码,而不依赖于您最喜欢的计算机语言中使用的样式。 它会阻止您进行自动分号插入 ,这会导致难以定位的严重错误。