【问题标题】:How to access parent grid id from subgrid in jqgrid如何从jqgrid中的子网格访问父网格ID
【发布时间】:2012-05-09 10:13:17
【问题描述】:

我正在构建一个运行良好的 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 = '<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;
}

点击图片会触发“RenderModalPopup”功能

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

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

我被困住了..请帮忙。

【问题讨论】:

标签: jquery asp.net-mvc-3 jqgrid


【解决方案1】:

在回调函数subGridRowExpanded 内部,您可以使用this 变量,该变量初始化为网格的DOM(&lt;table&gt; 的DOM)。所以你可以通过this.id得到父网格的id。如果您在subGridRowExpanded 内调用renderhtmlforSubgrid,我建议您使用

renderhtmlforSubgrid.call(this, subgrid_id, row_id)

而不是

renderhtmlforSubgrid(subgrid_id, row_id)

如果this 内部的renderhtmlforSubgrid 函数不会更改为全局window 对象,您可以使用this 为您保存有用的信息(例如this.id 用于id 或$(this) 用于jQuery 说唱歌手到父网格)。

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

此外,我从您的代码中看到,作为 JavaScript 开发人员,您更像是 C#/C++ 开发人员。 2年前我也有同样的问题。 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 代码中定义变量,很容易产生错误的代码。

最后的建议是对 JavaScript 代码使用 Kernighan and Ritchie's style 的代码格式,独立于您在您最喜欢的计算机语言中使用的样式。它将阻止您访问Automatic Semicolon Insertion,这可能会导致难以本地化的严重错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-10
    • 1970-01-01
    • 1970-01-01
    • 2011-10-28
    相关资源
    最近更新 更多