2016-01-12 23 views
0

我有一個帶有動態數據綁定的jqgrid,並且需要爲每個單元格設置自定義標題。我使用瞭解決方案中描述的方法 JQGrid with dynamic column: cellattr does not work當網格數據綁定是動態的時如何爲jqgrid單元格設置自定義標題

但它不起作用。我的代碼如下。

那臺colModel的操作方法:

var result = new { 
    Json = new { 
     colNames = new[] { "T1", "T2" }, 
     colModels = new[] { 
      new { index = "T1", label = "T1", name = "T1", 
       width = 100, cellattr = "customTitle", 
       editable = true, strtooltip = "A0" }, 
      new { index = "T2", label = "T2", name = "T2", 
       width = 100, cellattr = "customTitle", 
       editable = true, strtooltip = "A1" 
      } 
     }, 
     data = ...................... 

$.ajax({ 
    url: '/Client/PatientListing/GetTestData', 
    type: 'POST', 
    data: {}, 
    success: function (result) { 
     var colModels = result.Json.colModels; 
     var colNames = result.Json.colNames; 
     var data = result.Json.data.options; 
     jQuery.each(colModels, function (index, value) { 
      debugger; 
      cm = value; 
      if (cm.hasOwnProperty("cellattr") && 
       functionsMapping.hasOwnProperty(cm.cellattr)) { 
       cm.cellattr = functionsMapping[cm.cellattr]; 
      } 
     }); 

     var functionsMapping = { 
      "customTitle": function (rowId, val, rawObject) { 
       return 'title="' + rawObject.T1 + ' (' + rawObject.T2 + ')"'; 
      } 

     }; 

回答

0

在我看來,你想從服務器,它包含cellattr返回JSON數據。如果你使用更新版本的jqGrid,這是可能的。您可以定義自定義字符串名稱,您可以按以下方式將其用作cellattr回調的值。現在

$.jgrid = $.jgrid || {}; 
$.jgrid.cellattr = $.jgrid.cellattr || {}; 
$.extend(true, $.jgrid.cellattr, { 
    customTitle: function (rowId, val, rawObject) { 
     return 'title="' + rawObject.T1 + ' (' + rawObject.T2 + ')"'; 
    }, 
    customTitle2: function (rowId, val, rawObject) { 
     return 'title="' + rawObject.T1 + ' [' + rawObject.T2 + ']"'; 
    } 
}); 

可以在列定義使用cellattr: "customTitle"cellattr: "customTitle2"

順便說一句,免費的jqGrid支持更多的參數cellattr。它有其他參數cmrdata。參數cmcolModel的項目,其將被當前處理,並且rdata接近rawObject,但它總是具有與命名屬性相同的格式。問題是,rowattr中使用的rawObject和自定義格式化器正好有格式一樣像輸入數據。如果處理XML輸入數據,那麼rawObject是一個XML節點。如果使用數組形式[「1」,「2007-10-01」,「test」,「note」,「200.00」,「10.00」,「true」,「TN」,「 210.00「]而不是{id: "1", invdate: "2007-10-01", name: "test", note: "note", amount: "200.00", tax: "10.00", closed: true, ship_via: "TN", total: "210.00",並且您另外使用loadonce: true,比cellattrrawObject作爲數組在第一次處理輸入數據時以及作爲具有命名屬性的對象在稍後處理。它使得cellattr的邏輯更爲複雜。

因爲free jqGrid引入了額外的rdata參數,它提供了對象形式的數據allard。免費jqGrid是jqGrid的分支,自從Tony更改jqGrid的許可協議並將其產品更名爲Guriddo jqGrid JS(請參閱​​和here)後,我開發了這一分支。

下面是代碼的代碼片段

$.jgrid = $.jgrid || {}; 
$.jgrid.cellattr = $.jgrid.cellattr || {}; 
$.extend(true, $.jgrid.cellattr, { 
    customTitle: function (rowId, cellValue, rawObject, cm, rdata) { 
     if (cm.name === "name") { 
      return 'title="' + rdata.amount + ' (' + rdata.note + ')"'; 
     } else { 
      return 'title="' + rdata.amount + ' (' + rdata.name + "; " + rdata.note + ')"'; 
     } 
    } 
}); 

參見相應的演示https://jsfiddle.net/OlegKi/mme1krLj/1/

相關問題