2012-04-04 53 views
2

我正在经历的jqGrid 4.3.1的文档和源代码ColNames当谈到为tableToGrid()功能,我发现,列入optionsColModelColNames被忽略对象,因为它们是从HTML表格布局构建的。的jqGrid tableToGrid()被忽略colModel和期权

我的问题是有办法强制tableToGrid()接受这两个数组(ColModel,ColNames),而不是将它们从HTML表格中构建出来,特别是如果事先已知表格列。

当我通过代码去了,我发现在这部分程序为​​

function tableToGrid(selector, options) { 
... 
... 
// Build up the columnModel and the data 
var colModel = []; 
var colNames = []; 
jQuery('th', jQuery(this)).each(function() { 
    if (colModel.length === 0 && selectable) { 
     colModel.push({ 
      name: '__selection__', 
      index: '__selection__', 
      width: 0, 
      hidden: true 
     }); 
     colNames.push('__selection__'); 
    } else { 
     colModel.push({ 
      name: jQuery(this).attr("id") || jQuery.trim(jQuery.jgrid.stripHtml(jQuery(this).html())).split(' ').join('_'), 
      index: jQuery(this).attr("id") || jQuery.trim(jQuery.jgrid.stripHtml(jQuery(this).html())).split(' ').join('_'), 
      width: jQuery(this).width() || 150 
     }); 
     colNames.push(jQuery(this).html()); 
    } 
}); 

然而,我的破解会考虑这些变化

function tableToGrid(selector, options) { 
... 
... 
// Build up the columnModel and the data 
if(options.hasOwnProperty("colModel") && options.hasOwnProperty("colNames")) { 
    var colModel = options.colModel; 
    var colNames = options.colNames; 
} else { 
    var colModel = []; 
    var colNames = []; 
    jQuery('th', jQuery(this)).each(function() { 
        if (colModel.length === 0 && selectable) { 
        colModel.push({ 
        name: '__selection__', 
        index: '__selection__', 
        width: 0, 
        hidden: true 
        }); 
        colNames.push('__selection__'); 
        } else { 
        colModel.push({ 
        name: jQuery(this).attr("id") || jQuery.trim(jQuery.jgrid.stripHtml(jQuery(this).html())).split(' ').join('_'), 
        index: jQuery(this).attr("id") || jQuery.trim(jQuery.jgrid.stripHtml(jQuery(this).html())).split(' ').join('_'), 
        width: jQuery(this).width() || 150 
        }); 
        colNames.push(jQuery(this).html()); 
        } 
    }); 
} 

我只是想知道,如果有一个更简单的方法(可能是我错过的一个选项),可以强制执行此类行为,而无需调整源代码。

我这样做的原因首先是为某些字段强制datefmt选项,因为它们被jQgrid忽略,导致搜索功能出现问题。如果@ Oleg可以提供一些关于这方面的见解,它将非常感激。

干杯,N.

+0

[你认为'colModel'和'colNames'是否被忽略了?](http://jsfiddle.net/darkajax/4esFf/) – DarkAjax 2012-04-04 20:07:09

+0

从现有的HTML表格构建jqGrid时没有考虑它们。 – nawar 2012-04-04 20:11:24

回答

0

我认为主要的问题是,你使用tableToGrid在所有。我发现关于常见用法或体系结构的问题是技术问题。

如果你有键入数据像数字,日期,货币等等,你可能希望数据将被正确排序,例如由jqGrid。解析HTML表格中的本地化数据并解析数据不是最好的方法。如果您直接创建jqGrid ,则节省您的时间。您应该在data参数中提供输入数据。通过这种方式,数据可以轻松安全地读取,排序和分页。您可以轻松包含工具栏过滤或高级搜索或其他过滤搜索。只有当您提供jqGrid 纯数据时,所有这一切都会很好。

有关更多信息,请参阅the answer

+0

谢谢@Oleg。所以我认为我有两个选择:要么从表中提取数据并将其传递到'data'参数中,例如以读取表'​​'的函数形式,这样我就可以自由地更改格式或者第二个选项是忽略'tableToGrid()',并且只使用'jQgrid'和其他'dataType'的信息,而不是'local ||'。像'JSON'这样的客户端将数据格式化的任务移动到服务器端,我得到了正确的结果吗? – nawar 2012-04-04 20:34:56

+0

@nawar:即使你使用'datatype:'json',你也不应该格式化服务器上​​的数据。您应该发送纯数字,与语言无关的ISO 8601等日期。您应该使用[预定义](http://www.trirand.com/jqgridwiki/doku.php?id=wiki:predefined_formatter#predefined_format_types)或[自定义格式化程序](http://www.trirand.com/jqgridwiki/ doku.php?id = wiki:custom_formatter)并在客户端格式化数据。我建议你只在内部使用'tableToGrid'或纯文本数据,否则根本不使用它。 – Oleg 2012-04-04 20:45:00

+0

@nawar:[tableToGrid]的代码(https://github.com/tonytomov/jqGrid/blob/master/js/grid.tbltogrid.js)并不是很复杂。您可以调试它以查看您拥有的所有可能性。在实践中,它只会被人们使用,如何开始使用jqGrid并尝试保存现有的模式。你需要更清楚的jqGrid的更多功能将改变你使用* pure data *的输入,无论是本地JavaScript数据还是从每个Ajax服务器加载的数据。 – Oleg 2012-04-04 20:51:29