Hinzufügen von benutzerdefinierten Formatter-für jqgrid mit der dynamischen Spalte binden
Dies ist fast eine Fortsetzung von einer vorherigen Frage. Problem zeigt jqgrid mit der dynamischen Spalte binden
Ich versuche setzen, um eine Benutzerdefinierte Formatierung für die Spalten wie unten aus. Aber es passiert nichts. Bitte helfen Sie.
JSP:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript">
$(document).ready(function() {
$.ajax( {
type : "GET",
url : "interFinalTbaAction",
data : "",
dataType : "json",
success : function(result) {
var colD = result.couponStripList, colM = result.colModelList;
jQuery("#InterFinalTBAGrid").jqGrid( {
data : colD.rootVar,
datatype : 'local',
gridview : true,
colModel : colM,
loadComplete : function(data) {
},
loadError : function(xhr, status, error) {
alert('grid loading error');
}
});
},
error : function(x, e) {
alert(x.readyState + " " + x.status + " " + e.msg);
}
});
});
</script>
</head>
<body>
<table id="InterFinalTBAGrid">
<tr>
<td />
</tr>
</table>
</body>
</html>
JSON-Ergebnis aus Aktion:
{
"colModelList": [
{
"formatter": "CouponFormatter",
"index": 0,
"jsonmap": null,
"key": false,
"label": "Coupon",
"name": "coupon",
"resizable": true,
"search": true,
"sortable": false,
"title": true,
"width": 100
},
{
"formatter": "InterFinalPriceFormatter",
"index": 1,
"jsonmap": null,
"key": false,
"label": "03-10-11",
"name": "prceCM",
"resizable": true,
"search": true,
"sortable": false,
"title": true,
"width": 150
},
{
"formatter": "InterFinalPriceFormatter",
"index": 2,
"jsonmap": null,
"key": false,
"label": "04-13-11",
"name": "prceCMPlusOne",
"resizable": true,
"search": true,
"sortable": false,
"title": true,
"width": 150
},
{
"formatter": "InterFinalPriceFormatter",
"index": 3,
"jsonmap": null,
"key": false,
"label": "05-12-11",
"name": "prceCMPlusTwo",
"resizable": true,
"search": true,
"sortable": false,
"title": true,
"width": 150
},
{
"formatter": "InterFinalPriceFormatter",
"index": 4,
"jsonmap": null,
"key": false,
"label": "06-13-11",
"name": "prceCMPlusThree",
"resizable": true,
"search": true,
"sortable": false,
"title": true,
"width": 150
}
],
"couponStripList": {
"rootVar": [
{
"coupon": 5.0,
"prceCM": "103.734375,103.734375",
"prceCMPlusOne": "103.359375,99.03",
"prceCMPlusThree": "102.671875,102.671875",
"prceCMPlusTwo": "103.015625,103.015625"
},
{
"coupon": 5.5,
"prceCM": "105.984375,105.984375",
"prceCMPlusOne": "105.671875,99.2",
"prceCMPlusThree": "105.046875,105.046875",
"prceCMPlusTwo": "105.359375,105.359375"
}
]
},
"deliveredDataTimestamp": "03-02-11 11:52:57",
"requestedTimestamp": null
}
Javascript-Funktionen für Formatierer:
function CouponFormatter(cellValue, opts, rowObject) {
return cellValue + "Testing coupon formatter";
}
function InterFinalPriceFormatter(cellValue, opts, rowObject) {
return cellValue + "Testing price formatter";
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie
Sie nicht, setzen Sie den Wert von "formatter" - Eigenschaft, um die Funktion.
Einen Weg, um das problem zu beheben ist, um eine Schleife durch
result.colModelList
und stellen Sie sicher, dass eine Verwendung der "formatter" - Eigenschaft mit einigen string-Wert, für die Sie hat-Implementierung der Funktion in den JavaScript. Dann können Sie überschreiben die Eigenschaft mit dem Wert des entsprechenden formatter-Funktion.Anderen Weg wird sein, verwenden Sie inline-Funktionen in den Formatierer:
In der Weise, die Sie nicht hat, eine klare Trennung von code-und der grid-Parameter, aber Sie erhalten einige Kapselung der formatter innerhalb des Gitters.
AKTUALISIERT: ich hoffe, dass der nächste code-fragment (ungetestet) könnte deutlich machen, was ich meine unter der ersten Umsetzung Weg
AKTUALISIERT 2: Es wäre besser, registrieren die benutzerdefinierten Formatierungen und unformatters als standard-Formatierer wie es beschrieben wird, in die alte Antwort oder in Antwort. Danach kann man wirklich die syntax wie
"formatter": "InterFinalPriceFormatter"
und die benutzerdefinierten Funktionen$.fn.fmatter.InterFinalPriceFormatter
und$.fn.fmatter.InterFinalPriceFormatter.unformat
wird automatisch aufgerufen, von jqGrid.result.colModelList
wie Ersetze ich mit der formatter-Funktion? Können Sie etwas pseudo-code-Beispiel bitte?var InterFinalPriceFormatter = " function (cellValue, opts, rowObject) { return cellValue + \"Testing price formatter\"; }";
definiert die variableInterFinalPriceFormatter
mittypeof(InterFinalPriceFormatter) === "string"
undvar InterFinalPriceFormatter = function (cellValue, opts, rowObject) { return cellValue + \"Testing price formatter\"; };
definiert die Funktion und dietypeof(InterFinalPriceFormatter) === function"
"$.fn.fmatter
Objekt definierten Formatierungen, die Sie direkt verwenden als Zeichenfolge:formatter: "InterFinalPriceFormatter"
. Sie finden entsprechende code-Beispiele hier und im die Antwort. Es ist wichtig, dass es ermöglicht, um formatter as stringformatter: "dynamicLink"
statt der Funktionformatter: dynamicLinkFunction
.colModel
inclusiveformatoptions
. Sie könnensetColProp
Methode, die zu einer Vereinfachung verpasst. Wenn Sie laden die Informationen aus dem server, die Sie ändern könnenformatoptions
innerhalb vonbeforeProcessing
Rückruf. Im Falle der Füllung von jqGrid wird verwendet, die geändertcolModel
Werte.datatype
Sie verwenden? Verwenden Sieloadonce
(wenndatatype: "json"
)? Welches format haben input data von jqGrid (diejsonReader
Sie verwenden)? WiecolModel
definiert ist? und so weiter. Es ist besser, du fragst neue Frage stellen, wo Sie alle details.