Cómo agregar un formateador personalizado para jqgrid con enlace de columna dynamic

Esto es casi la continuación de una pregunta anterior. Problema que muestra jqgrid con enlace de columna dynamic

Estoy tratando de poner un formateador personalizado para las columnas como a continuación. Pero nada pasa. Por favor ayuda.

JSP:

   $(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); } }); });    

El resultado de JSON de la acción:

  { "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 } 

Las funciones de Javascript para formateadores:

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

Si utiliza

 "formatter": "InterFinalPriceFormatter" 

no establece el valor de la propiedad “formateador” en la función .

Una forma de solucionar el problema es realizar un bucle a través de result.colModelList y verificar que uno use la propiedad “formateador” con algún valor de cadena para el que tenga implementación como la función en el JavaScript. A continuación, puede sobrescribir la propiedad con el valor de la función de formateador correspondiente.

Otra forma será usar funciones en línea en el formateador:

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

De la forma en que lo hará, no tendrá una separación clara del código y los parámetros de la cuadrícula, pero recibirá una cierta encapsulación del formateador dentro de la cuadrícula.

ACTUALIZADO : Espero que el próximo fragmento de código (no probado) pueda aclarar a qué me refiero bajo la primera forma de implementación

 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 

ACTUALIZADO 2: Sería mejor registrar los formateadores y desentregados personalizados como formateadores estándar como se describe en la respuesta anterior o en la respuesta uno . Después de eso uno realmente puede usar la syntax como "formatter": "InterFinalPriceFormatter" y las funciones definidas personalizadas $.fn.fmatter.InterFinalPriceFormatter y $.fn.fmatter.InterFinalPriceFormatter.unformat serán llamadas automáticamente por jqGrid.