Добавляем ссылки на jQgrid и открываем в новом окне - PullRequest
1 голос
/ 28 марта 2012

У меня есть определение jqgrid, и я пытаюсь открыть выбранный документ в новом окне.

Мои последние URL должны выглядеть так:

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

, а также мне нужно сгенерировать этот тип URL:

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 выглядит следующим образом, и я не использую documentId, который мне нужен, для моего URL как части моей ColModel; значение, которое мне нужно, это @ unid

        [
      {
          "@entryid":"1-B933790B1DC265ED8025725800728CC5",
          "@unid":"B933790B1DC265ED8025725800728CC5",
          "@noteid":"1E76E",
          "@position":"1",
          "@read":true,
          "@siblings":40000,
          "@form":"Person",
          "$17":"Aaron, Adam",
          "InternetAddress":"consurgo@compleo.net",
          "OfficeCountry":"Namibia"
      },
      {
          "@entryid":"2-9D93E80306A7AA88802572580072717A",
          "@unid":"9D93E80306A7AA88802572580072717A",
          "@noteid":"19376",
          "@position":"2",
          "@read":true,
          "@siblings":40000,
          "@form":"Person",
          "$17":"Aaron, Dave",
          "InternetAddress":"gratia@incito.co.uk",
          "OfficeCountry":"Brazil"
      },
      {
          "@entryid":"3-FAFA753960DB587A80257258007287CF",
          "@unid":"FAFA753960DB587A80257258007287CF",
          "@noteid":"1D842",
          "@position":"3",
          "@read":true,
          "@siblings":40000,
          "@form":"Person",
          "$17":"Aaron, Donnie",
          "InternetAddress":"vociferor@nequities.net",
          "OfficeCountry":"Algeria"
      }
]

Пока я заставляю это работать, используя:

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

но мне нужно открыть его в новом окне

Я тоже пробовал с форматером: editLinkFmatter

function editLinkFmatter(cellvalue, options, rowObject) {
    return "<a href='./" + rowObject[2] + "' class='requestlink'>" + cellvalue + "</a>";
    //return "<a href='./documentId=" + rowObject.@unid + "' >Click here</a>";
    //return "<a href='./documentId=" + options.idName + "&action=OpenDocument'>" + cellvalue + "</a>";
}

и я не могу использовать rowObject. @ Unid, потому что имя узла

1 Ответ

3 голосов
/ 28 марта 2012

Мне кажется, что вы должны просто использовать атрибут target="_blank" в <a> (см. здесь и здесь ).Стандартный форматтер 'showlink' поддерживает атрибут target.

В качестве альтернативы пользовательскому формататору вы можете использовать форматер 'dynamicLink' (см. ответ ).Вы можете скачать последнюю версию jQuery.jqGrid.dynamicLink.js с здесь .

ОБНОВЛЕНО : Для оценки свойства с именем @unid вы можете использовать синтаксис rowObject["@unid"],Таким образом, editLinkFmatter может быть как

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

или лучше как

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