2013-06-26 2 views
0

Вызывается код attrSetting. Если я изменю его на {"name":"A", "index":"0", "cellattr":attrSetting}. Это нормально. И что же мне делать? Cellattr рассматривает его как строку не как функцию.jqGrid colModel, не вызывающий функцию

var gridData = {"list":[{"A":"abc", "B":"def", "C":"IRIS", "D":"Testing","E":"17-12-     2012","F":"Test", "attr":{"A":{"rowspan": 3}}},{"A":"abc", "B":"def", "C":"IRIS", "D":"Testing","E":"17-12-2012","F":"Test", "attr":{"A":{"display":"none"}}},{"A":"abc", "B":"def", "C":"IRIS", "D":"Testing","E":"17-12-2012","F":"Test", "attr":{"A":{"display":"none"}}}]}; 
$(document).ready(function(){ 
prepareGrid(); 
}); 
prepareGrid = function(colModel) { 
$("#grid").jqGrid({ 
    datatype : 'local', 
    contentType : 'application/json', 
    data  : gridData.list, 
    loadtext : "Loading...", 
    colNames : ['TB Element','GL Element', 'Company Name', 'Status', 'Date', 'User'], 
    colModel : [ 
        {"name":"A", "index":"0", "cellattr":"attrSetting" }, 
        {name:"B", index:1 }, 
        {name:"C", index:2}, 
        {name:"D", index:3}, 
        {name:"E", index:4}, 
        {name:"F", index:5} 
        ], 
    width  : '500px', 
    height  : '200px', 
    rownumWidth : 30, 
    scrollrows : true, 
    shrinkToFit : false, 
    rownumbers : true, 
    viewrecords : true, 
}); 
}; 
function attrSetting(rowId, val, rawObject, cm) { 
    var attr = rawObject.attr[cm.name], result; 
    if (attr.rowspan) { 
     result = ' rowspan=' + '"' + attr.rowspan + '"'; 
    } else if (attr.display) { 
     result = ' style="display:' + attr.display + '"'; 
    } 
    return result; 
}; 

ответ

0

Вы должны просто изменить

"cellattr":"attrSetting" 

в

"cellattr": attrSetting 

Кроме того, вы должны быть тщательно в использовании опций jqGrid. Текущий код содержит много ошибок. Только несколько примеров:

  • Если вы используете datatype: "local" вы должны удалитьindex свойства из colModel или использовать это значение, которые точно так же, как значение name собственности. Если вы не выполните правило, вы не сможете сортировать столбцы сетки, и поиск/фильтрация локальных данных также не будет работать.
  • Вы не используете pager или toppager опции jqGrid. В случае, я строго рекомендую вам указать опцию rowNum с некоторым достаточно большим значением, например rowNum: 10000. Значение defauls rowNum равно 20 (см. Столбец «По умолчанию» в таблице с the options). Таким образом, jqGrid отобразит только первые 20 строк из массива gridData.list, который вы укажете.
  • Значения width и height должны быть номера как 500 или 200 вместо строк, как '500px' и '200px'. Значение height может быть строкой "auto" или "%100".
  • Нет contentType вариант.
  • Я рекомендую вам использовать gridview: true и autoencode: true.
+0

Цистерны для ваших предложений. Но мой colModel происходит из java, который динамически создается из базы данных. Нет единственной функции, такой как 'attrSetting', у меня есть 5 различных функций. Когда я готовлю json для этой модели вызова, он автоматически берет строку. ** Я делаю это json с помощью jackson ** – Mitesh

+0

@Mitesh: Добро пожаловать! Посмотрите на [ответ] (http://stackoverflow.com/a/5175127/315935), в котором описывается обходной путь, который вы можете использовать. – Oleg