2016-05-23 10 views
0

in meinem Col-Modell habe ich zwei Zellen "Status" und "HiddenStatus". Der Grund dafür ist, dass "Status" übersetzbar ist, also ist dieser Weg besser, anstatt den Wert für jede Sprache zu überprüfen. Wie Sie unten sehen können, versuche ich die Klasse der Zelle 'Status' basierend auf dem Wert der Zelle 'HiddenStatus' zu setzen. Dies funktioniert jedoch nicht so, wie ich es mir erhofft habe, da die Klasse nicht korrekt eingestellt ist.Jqgrid mit Cellattr zum Umschalten einer Klasse auf separate Zelle

Ich glaube, das Problem, das ich habe, ist "getCell" wird verwendet, um den Wert anstelle eines Objekts zurückzugeben. Wie kann ich die Zelle als ein Objekt bekommen, so kann ich dann verwalten, welche Klasse ich hinzufügen oder entfernen.

{name: 'Status', width: 70, index: 'Status'}, 
{name: 'HiddenStatus', width: 70, hidden: true, cellattr : function(rowId, cellValue, rawObject, cm, rdata){ 

var statusCell = $(this).jqGrid('getCell',rowId,'Status'); 

if(cellValue != "Assigned"){ 
    $(statusCell).removeClass('status-assigned'); 
    return ''; 
} 
if(cellValue == "Assigned"){ 
    $(statusCell).addClass('status-assigned'); 
    return ''; 
}       
}}, 

Antwort

1

Zunächst ist es wichtig zu verstehen, was cellattr tun. Änderungen an der vorhandenen Seite sind teuer. Daher versucht jqGrid, das gesamte HTML-Fragment mit dem Tabellenkörper als einen langen String zu erstellen. Jede Spalte wird verwendet, um die Zellen (<td> Elemente) der entsprechenden Spalten des Gitters zu erstellen. Der Callback cellattr wird während des Aufbaus der Zelle aufgerufen und kann zum Festlegen von Attributen für die Zelle verwendet werden. Der Callback cellattr muss die Zeichenfolge zurückgeben. Wenn es zum Beispiel " class='status-assigned'" zurückgibt, hat der <td> die Klasse (<td class='status-assigned'>...</td>).

Der Callback cellattr heißt , bevor das Raster erstellt wird. So kann zB mit $(this).jqGrid('getCell',rowId,'Status') nicht auf das Netz zugegriffen werden.

Wenn Sie Klasse festlegen müssen status-assigned bedingt auf den Zellen der Spalte Status dann sollten Sie cellattr Rückruf in der Spalte Status definieren. Innerhalb des Rückrufs können Sie rawObject.HiddenStatus oder rdata.HiddenStatus verwenden. Man benötigt normalerweise keine versteckten Spalten wie HiddenStatus. Stattdessen reicht es, alle Eigenschaften von Eingabedaten zu verwenden, die man in additionalProperties Option von jqGrid benötigt. Zum Beispiel additionalProperties: ["HiddenStatus"].

Ihre ursprüngliche Code könnte auf die folgende geändert werden:

{ 
    name: 'Status', width: 70, 
    cellattr: function (rowId, cellValue, item) { 
     if (item.HiddenStatus === "Assigned") { 
      return " class='status-assigned'"; 
     } 
    } 
} 

Siehe the old answer für ein Beispiel für die Nutzung cellattr.

+0

Das hat perfekt funktioniert, danke. –

+0

@ Tony_89: Gern geschehen! – Oleg

+0

@ Tony_89: Ich sehe, dass Sie seit 18 Monaten Mitglied bei stackoverflow sind, aber Sie haben die abgegebenen Stimmen nur 41 Mal verwendet. ** Sie haben das Recht, 30 Fragen oder Antworten pro Tag ** zu wählen. Es ist sehr wichtig, ** alle Informationen zu wählen, die Sie auf dem Stackoverflow finden und die Sie hilfreich finden **. Die Abstimmung wird von Suchmaschinen (auch Google) zum Sortieren verwendet. Daher sollten Sie hilfreiche Antworten/Fragen abgeben, wenn Sie anderen Menschen aus der Gemeinschaft helfen möchten. Du hast 36 Fragen gestellt und bekommst mehrere Antworten auf einige Fragen. Waren zumindest einige aus den Antworten hilfreich? – Oleg