2012-03-28 5 views
1

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

Мой последний URLs хотел этим:

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":"[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" 
     } 
] 

До сих пор я сделать его работу с помощью:

{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=" + [email protected] + "' >Click here</a>"; 
    //return "<a href='./documentId=" + options.idName + "&action=OpenDocument'>" + cellvalue + "</a>"; 
} 

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

ответ

3

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

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

ОБНОВЛЕНО: Для того, чтобы оценить свойства с именем @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>"; 
} 
+0

Спасибо @Oleg, я ясно с атрибутом _blank; проблема в том, что я не могу получить значение строки для элемента @unid. Я попытался rowObject. @ Unid, и я получаю «невозможно преобразовать имя атрибута в строку», потому что @ на моем имени элемента; если я попытаюсь например rowObject.InternetAddress работает отлично. Я также попробовал rowObject [2] без радости, поэтому я использую '{name: 'OfficeCountry', width: 200, formatter: 'showlink', formatoptions: {baseLinkUrl: 'xPerson.xsp', addParam: '& action = openDocument ', idName:' documentId '}} 'и работает нормально, но не открывается в новом окне – PSolano

+0

@PSolano: Ohh! Это не проблема. Вы можете просто использовать другой синтаксис: 'rowObject [" @ unid "]'. Вы можете использовать это свойство: у него есть специальные символы, например, «@» или «» (пробел): 'rowObject [" my property with spaces "]'. – Oleg

+0

Вы, безусловно, мужчины. Работал как шарм. Я разработчик заметок, и я хочу использовать этот элемент управления сеткой для приложений Domino, и я не видел ничего, кроме интеграции jqGrid и Notes. Все еще есть много вопросов, и я двигаюсь медленно, но с хорошим прогрессом. Ткс снова. – PSolano