让jqgrid根据数据的值返回一个链接

Having jqgrid return a link based on the value of the data

本文关键字:链接 一个 返回 jqgrid 数据      更新时间:2023-09-26

我定义了以下网格:

$("#list").jqGrid({
    url:'listOpenQueryInXML.php',
    datatype: 'xml',
    colNames:['Id','name1', 'name2', 'status', 'type'],
    colModel:[
        {name:'id', index:'id', editable: false, formatter:'showlink', formatoptions:{baseLinkUrl:'continue.php'}},
        {name:'name1', index:'name1', editable: false},
        {name:'name2', index:'name2', editable: false},
        {name:'status', index:'status', editable: false},
        {name:'type', index:'type', editable: false}
    ],
    autowidth: true,
    sortname: 'id',
    viewrecords: true,
    pager: null,
    sortorder: 'id',
    loadonce: false,
    caption: 'Open Query',
    height: '100%',
    xmlReader: { root : "rows", row: "row", repeatitems: false, id: "id" },

现在,我想要的是根据"id"、"status"或任何字段的内容,将continue.php覆盖为不同的链接。

所以如果

status=NEW link="NEW.php?id="{id}"status=STUCK link="helper.php?id={id}"

等等。

我正在运行jqGrid 4.3.1和jQuery 1.8.16。

您应该使用自定义格式化程序,而不是showlink格式化程序。在这种情况下,您必须根据回调函数的cellvalueoptionsrowObject参数自己构造<a>元素。因为您使用datatype: 'xml',所以rowObject参数将是IXMLDOMElement,所以要获得status的包含,您应该使用find或children jqGrid方法。

我没有测试下面的代码,但我想你可以做下面的

$("#list").jqGrid({
    url: 'listOpenQueryInXML.php',
    colNames: ['Id', 'name1', 'name2', 'status', 'type'],
    colModel :[
        {name:'id', formatter: function (cellvalue, options, rowObject) {
                return '<a href="' +
                           ($(rowObject).children('status').text() === 'NEW' ?
                               'new.php' : 'helper.php') +
                           '?id=' + cellvalue + '">' + cellvalue + '</a>';
            },
        {name:'name1'},
        {name:'name2'},
        {name:'status'},
        {name:'type'}
    ],
    autowidth: true,
    gridview: true, 
    sortname: 'id',
    viewrecords: true,
    sortorder: 'id',
    caption: 'Open Query',
    height: '100%',
    xmlReader: { repeatitems: false, id: "id" }
});

这只是格式化程序的一个例子。例如,您可以在将显示给用户的链接中放置其他文本。

我删除了使用许多默认选项的jqGrid定义,并添加了gridview: true选项,这提高了网格的性能。