2014-09-19 2 views
0

Я пытаюсь передать данные (URL), хранящиеся в файле XML, в onCellSelect, чтобы я мог открыть с ним новую страницу. Веб-сайт можно посмотреть по адресу: www.bcgsc.ca/downloads/bdavis/tempsite3/.Передача данных, хранящихся в XML, на onCellSelect

Поскольку я не смог выяснить способ передачи этих данных напрямую (т.е. у меня нет доступа к rawObject, как к функциям cellattr, не так ли?), Мой подход заключался в том, чтобы извлечь эти данные в my cellattr и использовать его для определения атрибута data- * (в частности data-rowSpecificURL, fwiw), а затем извлечь его в cellSelect, но когда я пытаюсь извлечь эти данные, используя getRowData или getLocalRow или getCell, он показывает мне атрибуты к содержанию внутри которого находится непосредственно под тегом.

Есть ли у кого-нибудь предложения? Если бы я знал, как это сделать, я могу установить атрибут data- * в теге div вместо тега td, но я не знаю, как это сделать. Или если у кого-нибудь есть предложение о том, как извлечь этот атрибут из тега td. Или как напрямую обращаться к rawObject.

Спасибо, Брэд

ответ

1

Использование data_* атрибута ячейки или строки является одним из способов сохранить соты или строки конкретную информацию. См. the answer для соответствующего примера кода.

Мне кажется, что вам больше подходит другой способ: использование beforeProcessing для анализа необработанного ответа сервера. Внутри beforeProcessing у вас есть полный доступ к все данные вернулись с сервера. Можно подготовить объект с дополнительной информацией в виде карты по rowid. Таким образом, можно легко получить информацию о строках по rowid позже. Объект с дополнительной информацией можно сохранить, расширяя список стандартных параметров jqGrid с новым.

Например давайте входные информационные данные о строке вытянуты в виде следующего

<row id='123'> 
    <onHoverText>this is my foo</onHoverText> 
    <rowSpecificURL>http://www.google.com</rowSpecificURL> 
    <cell><![CDATA[Blood]]></cell> 
    <cell class="has_data in_progress"></cell> 
    ... 
</row> 

В случае <onHoverText> и <rowSpecificURL> элементов содержит пользовательские ряда конкретных информации. Предлагаю построить объект (карта), как

{ 
    123: {tooltip: "this is my foo", url: "http://www.google.com" } 
} 

, который сохраняет пользовательскую информацию по rowid. Можно сохранить такую ​​карту myData в качестве пользовательского параметра jqGrid myParam с помощью

$(this).jqGrid("setGridParam", { myParam: myData }); 

Позже вы можете получить информацию от myParam параметра по

var rowSpecificInformation = $(this).jqGrid("getGridParam", "myParam")[rowid]; 
// rowSpecificInformation.tooltip and rowSpecificInformation.url 

Например код из демо вашего предыдущего вопроса может быть переписать следующим образом

$("#list").jqGrid({ 
    url: "BradDavis2.xml", 
    colModel: [ 
     { name: "c1", width: 360, classes: 'ui-state-default', 
      cellattr: function (rowId, val, rawObject, cm, rdata) { 
       // get custom row information from custom parameter 
       var p = $(this).jqGrid("getGridParam", "myParam"); // this.p.myParam 
       // get object with additional row specific information from p[rowId] 
       return p != null && p[rowId] != null && p[rowId].tooltip != null ? 
        ' title="' + p[rowId].tooltip + '"' : ''; 
     }}, 
     ... 
    ], 
    ... 
    beforeProcessing: function (data) { 
     var rows = $(">rows>row", data), l = rows.length, i, item, myData = {}, $p, id, myInfo; 
     for (i = 0; i < l; i++) { 
      item = rows[i]; 
      id = $(item).attr("id"); // get rowid 

      // fill custom information from every row to object 
      myInfo = {}; 
      $p = $("onHoverText", item); 
      if ($p.length > 0) { 
       myInfo.tooltip = $p.text(); 
      } 
      $p = $("rowSpecificURL", item); 
      if ($p.length > 0) { 
       myInfo.url = $p.text(); 
      } 

      // save the object with custom information in a map by id 
      myData[id] = myInfo; 
     } 
     // save custom information in custom jqGrid parameter 
     $(this).jqGrid("setGridParam", { myParam: myData }); 
    }, 
    onCellSelect: function(rowid, iCol, cellcontent, e, rawObject) { 
     var $self = $(this), 
      colModel = $self.jqGrid("getGridParam", "colModel"), 
      myData = $self.jqGrid("getGridParam", "myParam"); // this.p.myParam 

     if (colModel[iCol].name === "c1" && myData != null && myData[rowid] != null && myData[rowid].url != null) { 
      window.open(myData[rowid].url, "_blank"); 
     } 
    } 

соответствующее демо вы найдете here , Если щелкнуть по ячейке в первом столбце, откроются новые окна браузера с www.google.com.

+0

@BradDavis: Добро пожаловать! Я рад, что смогу вам помочь. Кстати, вы можете повысить свою репутацию на ["accepting"] (http://meta.stackexchange.com/a/5235) ответы на ваши предыдущие вопросы. – Oleg

Смежные вопросы