【问题标题】:JqSuite PHP: get column name or id?JqSuite PHP:获取列名或ID?
【发布时间】:2014-01-05 04:59:57
【问题描述】:

如何在custom-format 函数中获取列信息(名称或 ID)?

grid.php中的一些代码:

$grid->dataType = 'json';
$grid->setColModel();

我的自定义格式函数

function formatPdfLink(cellValue, options, rowObject) {

var cellHtml = "<a href='" + cellValue + "' title='" + [show column Name here] + "' ><img src='../img/PDF_icon.png ' /></a> ";

return cellHtml; }

Javascript 代码摘录,在生成的页面中找到(查看源代码):

jQuery(document).ready(function($) {
jQuery('#grid').jqGrid({

        "jsonReader": {
        "repeatitems": false,
        "subgrid": {
            "repeatitems": false
        }
    },
    "xmlReader": {
        "repeatitems": false,
        "subgrid": {
            "repeatitems": false
        }
    },

        "colModel": [{ {
        "name": "pdf_1",
        "index": "pdf_1",
        "sorttype": "string",
        "label": "C",
        "sortable": false,
        "width": 25,
        "align": "center",
        "search": false,
        "formatter": formatPdfLink,
        "unformat": unformatPdfLink,
        "editoptions": {
            "size": 100
        },
        "editable": true
    }
    }]

我曾尝试使用rowObject.columnName,但它不起作用!

注意:我没有使用loadonce: true

PS:如果需要更多详细信息,请告诉我。

【问题讨论】:

  • $grid-&gt;setColModel() 没有提供任何信息。以同样的方式你可以发布:“一些代码......”。哪种格式具有您使用的输入数据?您可以使用Fiddler 或IE 的开发者工具来跟踪HTTP 流量。您应该包括例如一行输入数据。您是否使用loadonce: true 选项?您在列中使用jsonmap 还是在jqGrid 中使用jsonReader 选项? colModel 中的列究竟是如何定义的?您可以在网络浏览器中打开源代码以查看执行了哪些代码。
  • @Oleg 我已根据您的要求编辑了我的问题。希望您现在可以获得更多有价值的信息。
  • 在 grid.php 中我没有使用 loadonce: true ,我只是有关于 colmodel 的这一行:$grid-&gt;setColModel()

标签: javascript jqgrid jqgrid-php jqgrid-formatter


【解决方案1】:

因为您使用repeatitems: false 格式的数据,所以网格的输入数据应该是具有命名属性的项,其名称与colModelname 属性的值相同。所以 formatPdfLink 函数用作 formatter 将得到与原始数据相同的简单格式的第三个参数 rowObject。例如可以使用rowObject.pdf_1。要访问另一列,您只需使用该列的 colModel 中使用的 name 属性的值。

更新:如果您多次使用相同的自定义格式化程序,您可能需要访问当前列的属性。 options 参数将在这里为您提供帮助。

function formatPdfLink(cellValue, options, rowObject) {
    return "<a href='" + cellValue +
        "' title='" + options.colModel.name +
        "' ><img src='../img/PDF_icon.png ' /></a> ";
}

参数options 包含属性rowIdcolModelgidpos。自定义格式化程序内部的this 被初始化为网格的DOM,因此您可以使用例如$(this).jqGrid("getGridParam", "parameterName") 或仅使用this.p.parameterName 来访问jqGrid 的其他选项。属性colModel 仅包含当前列的列定义,而不包含完整的colModel 参数。

例如,您可以重写上面的代码以在工具提示中从colNames 而不是name 属性设置下一个:

function formatPdfLink(cellValue, options, rowObject) {
    //var colNames = $(this).jqGrid("getGridParam", "colNames");
    var colNames = this.p.colNames;
    return "<a href='" + cellValue +
        "' title='" + colNames[options.pos] +
        "' ><img src='../img/PDF_icon.png ' /></a> ";
}

【讨论】:

  • 是的,rowObject.pdf_1 有效。实际上,我在 4 列中使用了相同的函数 formatPdfLink。所以我需要动态获取列名并在formatPdfLink 函数中使用它。 :)
  • @JessStone:问题现在解决了还是还有问题?您应该 "accept" 回答(也请查看您的旧问题)以关闭问题。
  • 真的很抱歉,但我不明白如何在formatPdfLink 中获取列名。我不知道列名:我需要在函数中动态知道它
  • 我正在寻找与此类似的东西(我将在我的自定义格式函数中使用它):var colName = "Column name = " + rowObject.columnName; 。但是rowObject.columnName 不存在..我想知道正确的语法是什么...
  • @JessStone:您需要这里的哪个[show column Name here]?如果使用formatPdfLink相同 列还是另一个 列?要获得名称相同的列,您可以使用具有rowIdcolModelgidpos 属性的options 参数。例如尝试options.colModel.name
猜你喜欢
  • 1970-01-01
  • 2014-04-15
  • 2012-01-31
  • 2016-06-09
  • 2011-07-28
  • 1970-01-01
  • 2011-01-28
  • 2020-12-28
  • 2011-07-22
相关资源
最近更新 更多