关于json:添加到jQgrid的链接并在新窗口中打开

Adding links to jQgrid and open in new window

我有这个jqgrid定义,我正在尝试在新窗口中打开选定的文档。

我的最终到达网址应为:

1
http://localhost/XPagesSortableSearchResults.nsf/xPerson.xsp?documentId=9D93E80306A7AA88802572580072717A&action=openDocument

,我还需要生成这种类型的url:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
http://localhost/XPagesSortableSearchResults.nsf/$$OpenDominoDocument.xsp?documentId=9D93E80306A7AA88802572580072717&action=openDocument


$().ready(function(){
jQuery("#list2").jqGrid({
        url:'./xGrid7.xsp/peoplejson',
        datatype:"json",
        colNames:['InternetAddress','#','Name','OfficeCountry'],
        colModel:[                              
            {name:'InternetAddress',index:'InternetAddress', width:200},
            {name:'@position',index:'@position', width:50,sorttype:'int'},
            {name:'$17',index:'$17', width:200},
            {name:'OfficeCountry',
                   width:200,
                   formatter:editLinkFmatter
                  // formatter:'showlink',
                  // formatoptions:{ baseLinkUrl:'xPerson.xsp',addParam: '&action=openDocument', idName:'documentId'}
            }
        ],
        jsonReader: {
            repeatitems: false,
            id: '@unid',
            root: function (obj) {
                  if ($.isArray(obj)) {
                       return obj;
                  }
                  if ($.isArray(obj.items)) {
                    return obj.items;
                  }
                  return [];
                     },
             page: function () { return 1; },
             total: function () { return 1; },
             records: function (obj) {
                    if ($.isArray(obj)) {
                        return obj.length;
                    }
                    if ($.isArray(obj.items)) {
                        return obj.items.length;
                    }
                    return 0;
            }
        },
        caption:"JSON Example",
        height: 500,
        gridview: true,
        loadonce: true,
        ignoreCase: true,
        rowNum: 50,
        rowList: [50, 100, 500, 1000],
        pager: '#pager2'
        }).jqGrid('filterToolbar', {stringResult: true, defaultSearch: 'cn', searchOnEnter: false});

请注意,我的Json对象看起来像这样,并且我没有在URL上使用我需要的documentId作为ColModel的一部分;我需要的值是@unid

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
        [
      {
         "@entryid":"1-B933790B1DC265ED8025725800728CC5",
         "@unid":"B933790B1DC265ED8025725800728CC5",
         "@noteid":"1E76E",
         "@position":"1",
         "@read":true,
         "@siblings":40000,
         "@form":"Person",
         "$17":"Aaron, Adam",
         "InternetAddress":"[email protected]",
         "OfficeCountry":"Namibia"
      },
      {
         "@entryid":"2-9D93E80306A7AA88802572580072717A",
         "@unid":"9D93E80306A7AA88802572580072717A",
         "@noteid":"19376",
         "@position":"2",
         "@read":true,
         "@siblings":40000,
         "@form":"Person",
         "$17":"Aaron, Dave",
         "InternetAddress":"[email protected]",
         "OfficeCountry":"Brazil"
      },
      {
         "@entryid":"3-FAFA753960DB587A80257258007287CF",
         "@unid":"FAFA753960DB587A80257258007287CF",
         "@noteid":"1D842",
         "@position":"3",
         "@read":true,
         "@siblings":40000,
         "@form":"Person",
         "$17":"Aaron, Donnie",
         "InternetAddress":"[email protected]",
         "OfficeCountry":"Algeria"
      }
]

到目前为止,我可以使用:

1
2
3
4
5
  {name:'OfficeCountry',
               width:200,                                      
               formatter:'showlink',
               formatoptions:{ baseLinkUrl:'xPerson.xsp',addParam: '&action=openDocument', idName:'documentId'}
    }

但是我需要在新窗口中打开它

我也尝试使用formatter:editLinkFmatter

1
2
3
4
5
function editLinkFmatter(cellvalue, options, rowObject) {
    return"" + cellvalue +"";
    //return"Click here";
    //return"" + cellvalue +"";
}

并且我不能使用rowObject。@ unid,因为节点名称


在我看来,您应该只在中使用target="_blank"属性(请参见此处和此处)。标准的" showlink"格式化程序支持target属性。

作为自定义格式化程序的替代方法,您可以使用'dynamicLink'格式化程序(请参见答案)。您可以从此处下载jQuery.jqGrid.dynamicLink.js的最新版本。

已更新:要评估名称为@unid的属性,可以使用语法rowObject["@unid"]。所以editLinkFmatter可以像

1
2
3
4
function editLinkFmatter(cellvalue, options, rowObject) {
    return"<a href='?documentId=" + rowObject["@unid"] +
       "&action=OpenDocument' class='requestlink'>" + cellvalue +"";
}

或更像是

1
2
3
4
5
6
7
function editLinkFmatter(cellvalue, options, rowObject) {
    return"<a href='?" +
        $.param({
            documentId: rowObject["@unid"],
            action: 'OpenDocument'
        }) +"' class='requestlink'>" + cellvalue +"";
}