如何从 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));},");
}

我有一个带有文本区域的子网格和一个将由以下代码呈现的图像控件

function renderhtmlforSubgrid(subgrid_id, row_id) {
    var script = '<div style="margin-left:10px; margin-top:10px; margin-bottom:10px;">';
    script += '<textarea class="txtCommentwatermarkOn" id="txtCommentSection" name="txtCommentSection" rows=2 cols=20>Type your comments here</textarea>';
    script += '<input onclick="RenderModalPopup(' + row_id + ',' + subgrid_id + ',this);" type="image" id="image" src="../../Content/Images/commentIcon.png"/>';
    script += '</div>';
    return script;
}

点击图像时,将触发"渲染模式弹出窗口"功能

function RenderModalPopup(rowid, tableid, event) {
    var dataFromRow = $('#tblArtifact1').jqGrid('getRowData', rowid);
    var PhaseArtifactId = $('#tblArtifact1').jqGrid('getCell', rowid, 'ID');
    ..........................

一切都工作正常...现在的问题是我将网格 ID 硬编码为"tblArtifact1"以获取列值。需要删除。我可以获取网格 ID 吗?是否有任何预定义的参数/函数来获取它?

我被困住了..请帮忙。

在回调函数subGridRowExpanded内部,您可以使用初始化为网格 DOM 的变量this(<table>的 DOM(。因此,您可以通过this.id获取父网格的id。如果您在subGridRowExpanded内部调用renderhtmlforSubgrid,我建议您使用

renderhtmlforSubgrid.call(this, subgrid_id, row_id)

而不是

renderhtmlforSubgrid(subgrid_id, row_id)

在这种情况下renderhtmlforSubgrid函数内部的this将不会更改为全局window对象,您可以拥有对您保存有用信息的this(例如 id 的this.id或 jQuery rapper 的$(this)到父网格(。

我建议您考虑在子网格中使用idPrefix选项来防止 id 重复(有关更多信息,请参阅答案(。

此外,我从你的代码中看到,你更像是 C#/C++ 作为 JavaScript 开发人员的开发人员。两年前我也有同样的问题。JavaScript 有一些结构接近于众所周知的其他语言,但深层语义确实不同。因此,JavaScript开发人员有许多标准的陷阱,他以错误的方式使用现有的结构。

例如:切勿使用变量、属性或名称以大写字母开头的函数。目前RenderModalPopupPhaseArtifactId违反了规则。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 代码,独立于您过去在自己喜欢的计算机语言中使用的样式。它将阻止您自动分号插入,这可能会产生难以定位的严重错误。

最新更新