2017-06-06 5 views
0

Mit der Folge in jqGrid:JqGrid mit Fancybox - get Zellobjekt

colModel: [ 
      {name:"",index:"",width:100}, 
      {name:"diagnosis",index:"diagnosis",width:100,formatter:fancyBoxFormatter}, 
      {name:"prescription", index:"prescription",width:100,formatter:fancyBoxFormatter}, 
      {name:"tests",index:"tests",width:100,formatter:fancyBoxFormatter}, 
      {name:"imaging",index:"imaging",width:100,formatter:fancyBoxFormatter}, 
      {name:"generic",index:"generic",width:100,formatter:fancyBoxFormatter}, 
      {name:"referral",index:"referral",width:100,formatter:fancyBoxFormatter}, 
      {name:"management",index:"management",width:100,formatter:fancyBoxFormatter}, 
      {name:"completed",index:"completed",width:100} 
      ], 

Dann:

function fancyBoxFormatter(cellvalue, options, rowObject) { 

    var result, 
     link, 
     fancyBoxHTML, 
     fancyBoxContent; 

    link = "<a class=\"fancybox\" href=\"#data" + options.rowId + "\">" + cellvalue + "</a>"; 
    fancyBoxContent = cellvalue; 
    fancyBoxHTML = "<div style=\"display:none\"><div id=\"data" + options.rowId + "\">" + fancyBoxContent + "</div></div>"; 
    return link + fancyBoxHTML; 
} 

Dies zeigt den gleichen Inhalt in Fancybox für alle Zellen in der Zeile (basierend auf rowID. ..) Wie kann ich diese Funktion in einzelne Zell-IDs ändern, anstatt nur die ganze Zeile?

+0

Könnten Sie weitere jqGrid-Details posten? Welche ** Version ** von jqGrid verwendest du? Welchen ** fork ** von jqGrid verwendest du ([free jqGrid] (https://github.com/free-jqgrid/jqGrid), kommerziell [Guriddo jqGrid JS] (http://guriddo.net/?page_id=103334)) oder ein altes jqGrid in der Version <= 4.7)? In jedem Fall verwenden Sie den falschen Wert 'name: '" 'für die letzte Spalte und den Formatierer' fancyBoxFormatter' generieren divs mit ID-Duplikaten, da Sie für alle die gleiche 'id' (' "data" + options.rowId') verwenden Säulen. – Oleg

Antwort

1

Bitte schreiben Sie in allen Fragen rund um jqGrid die Version von jqGrid, die Sie verwenden (können) und die Gabel, die Sie (free jqGrid, Gewerbe Guriddo jqGrid JS oder eine alte jqGrid in Version < = 4.7) verwenden.

Der options Parameter des benutzerdefinierten Formatierers fancyBoxFormatter enthält rowId, colModel, gid, pos und rowData Eigenschaften (rowData nur in freier jqGrid fork existiert). So können Sie verwenden, zum Beispiel

function fancyBoxFormatter (cellvalue, options) { 
    return "<a class=\"fancybox\" href=\"#data" + 
     options.rowId + "_" + options.colModel.name + "\">" + cellvalue + "</a>" + 
     "<div style=\"display:none\"><div id=\"data" + 
     options.rowId + "_" + options.colModel.name + "\">" + 
     cellvalue + "</div></div>"; 
} 

Zusätzlich erhalten Sie die name Eigenschaft der ersten Spalte zu beheben haben. Man kann nicht leer name verwenden (siehe name:""). Sie könnten beliebige eindeutigen Wert für name verwenden die Regeln in HTML5/CSS für IDs (z. B. keine Leerzeichen).

Ich würde Ihnen zusätzlich empfehlen, nicht benötigte index Eigenschaften und gemeinsame width:100 Option aus allen Spalten zu entfernen. Anstatt width:100 in jede Spalte zu setzen, können Sie cmTemplate: {width: 100} Option von jqGrid verwenden.

+0

Hallo Oleg, ich benutze Guriddo jqGrid JS 5.2.1 als Test – IlludiumPu36

+0

Ich habe die fancybox-Funktion mit Ihrem Code ohne irgendwelche Änderungen ersetzt und einen Namen für die erste Spalte eingegeben. Ich komme jetzt in die fancybox-Anzeige "Der angeforderte Inhalt kann nicht geladen werden. Bitte versuchen Sie es später noch einmal." – IlludiumPu36

+0

@ IlludiumPu36: Bitte teilen ** die Demo ** (als JSFiddle, zum Beispiel), die das Problem reproduziert. Ich habe den Code in meiner Antwort korrigiert, weil man wahrscheinlich den 'href'-Wert ändern muss, wenn die' id 'geändert wird. Nebenbei entwickle ich [free jqGrid] (https://github.com/free-jqgrid/jqGrid/) fork von jqGrid, welches komplett kostenlos unter MIT- oder GPLv2-Lizenzen verfügbar ist und nicht helfen kann Sie mit Guriddo spezifischen Problemen. – Oleg