gpt4 book ai didi

jqgrid - 如何使用动态列绑定(bind)为 jqgrid 添加自定义格式化程序

转载 作者:行者123 更新时间:2023-12-04 10:44:18 26 4
gpt4 key购买 nike

这几乎是上一个问题的延续。 Problem showing jqgrid with dynamic column binding

我正在尝试为下面的列放置一个自定义格式化程序。但什么也没有发生。请帮忙。

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>

Action 的 JSON 结果:
 {
"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 函数:
  function CouponFormatter(cellValue, opts, rowObject) {
return cellValue + "Testing coupon formatter";
}

function InterFinalPriceFormatter(cellValue, opts, rowObject) {
return cellValue + "Testing price formatter";
}

最佳答案

如果你使用

"formatter": "InterFinalPriceFormatter"

您没有将“格式化程序”属性的值设置为 功能 .

解决此问题的一种方法是遍历 result.colModelList并验证一个使用带有某个字符串值的“格式化程序”属性,您已将其实现为 JavaScript 中的函数。然后,您可以使用相应的格式化程序函数的值覆盖该属性。

另一种方法是在格式化程序中使用内联函数:

"formatter": "function (cellValue, opts, rowObject) { return cellValue + \"Testing price formatter\"; }"

在这种方式下,您不会清楚地将代码和网格参数分开,但是您会在网格内收到一些格式化程序的封装。

更新 :我希望下一个代码片段(未经测试)可以清楚我在第一种实现方式下的意思

var functionsMapping = {
// here we define the implementations of the custom formatter which we use
"CouponFormatter": function (cellValue, opts, rowObject) {
return cellValue + "Testing coupon formatter";
},
"InterFinalPriceFormatter": function (cellValue, opts, rowObject) {
return cellValue + "Testing price formatter";
}
};
$.ajax({
type: "POST",
url: "interFinalTbaAction.action",
data: "",
dataType: "json",
success: function(result) {
var i, cm, colD = result.couponStripList,
colN = result.columnNames,
colM = result.colModelList;
for (i=0;i<colM.length,i++) {
cm = colM[i];
if (cm.hasOwnProperty("formatter") &&
functionsMapping.hasOwnProperty(cm.formatter)) {
// fix colM[i].formatter from string to the function
cm.formatter = functionsMapping[cm.formatter];
}
}
jQuery("#dataGrid").jqGrid({/* all parameters from your code */});
},
error: function(jqXHR, textStatus, errorThrown){
alert("Error Occured!" + " | " + jqXHR.responseText + " | " +
textStatus + " | " + errorThrown);
}
});

更新 2:最好是 注册 自定义格式化程序和取消格式化程序作为标准格式化程序,如 the old answer 中所述或在 answer one .之后就可以真正使用 "formatter": "InterFinalPriceFormatter" 之类的语法了。和自定义函数 $.fn.fmatter.InterFinalPriceFormatter$.fn.fmatter.InterFinalPriceFormatter.unformat将由 jqGrid 自动调用。

关于jqgrid - 如何使用动态列绑定(bind)为 jqgrid 添加自定义格式化程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5171617/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com