2011-05-18 99 views
0

失敗,我填充新的網格從JSON 自定義格式 格式定義:jqGrid的自定義格式上addClass

testFormatter(value,el,opts) 
{ 
    if (value==0) 
    { 
      $(el).addClass("Fail"); 
    } 
    … 
} 

我期待的細胞使用的CSS類 但如果我檢查細胞他們不會添加該類。

回答

6

您發現了custom formatter的使用情況的典型錯誤。理解jqGrid具有最佳性能是很重要的,如果網格包含將被創建爲字符串。在gridview:true給你的表現。任何custom formatter應在gridview:true模式下工作,所以定製格式化器沒有參數這是DOM元素,所以你不能使用操作,如$(el).addClass("Fail");

在一些老的回答(見herehere),你可以找到如何問題可以解決,但我會建議使用jqGrid 4.0.0的新功能:cellattr選項。對於undefrstanding:自定義格式化程序的目的不是像class一樣添加一些HTML屬性。它應該用於例如將某些通用日期格式(如yyyy-mm-dd)轉換爲dd.mm.yyyy(德國風格)等本地化格式。如果你不想改變列的格式,但只想添加一些屬性title(用於工具提示),class(如你的情況),style等等新的cellattr選項是你所需要的。

在你情況下,你可以定義

cellattr: function(rowId, cellValue, rawObject, cm, rdata) { 
    if (cellValue==0) { 
     return ' class="Fail"'; 
    } 
} 

看到一個小的演示here

enter image description here

在我加入calsses ui-state-errorui-state-error-text'Client'列的所有單元格,其中在演示'Closed'複選框已設置。

+0

感謝您的回答,看來我無法在jqgrid站點找到'cellattr'的文檔,只是他們添加了它。 – shevski 2011-05-18 19:03:47

+1

@shevski:有許多有趣的新選項尚未在文檔中描述。例如,列模板是在jqGrid 3.8.2中引入的,但仍未在文檔中描述(請參見[這裏](http://stackoverflow.com/questions/6044047/stopping-columns-resizable-in-jqgrid/6047856# 6047856))。如果你在trirand論壇搜索'cellattr',你會發現一些信息。 – Oleg 2011-05-18 19:17:47