jQgrid tableToGrid()忽略选项中的colModel和ColNames

时间:2012-04-04 19:37:09

标签: jquery jqgrid

我正在查看jqGrid 4.3.1的文档和源代码,当涉及tableToGrid()函数时,我发现ColModelColNames被包含在options对象,因为它们是从HTML表格布局构造的。

我的问题是有一种方法可以强制tableToGrid()接受这两个数组(ColModel,ColNames)而不是从HTML表中构造它们,特别是如果事先知道表列的话。

当我查看代码时,我在TableToGrid

的代码中找到了此部分
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。

1 个答案:

答案 0 :(得分:0)

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

如果你有输入数据,如数字,日期,货币等,你可能希望通过jqGrid对数据进行正确排序。从HTML表中解析本地化数据和取消格式化数据不是最好的方法。如果要直接创建jqGrid ,可以节省时间。您应该在data参数中提供输入数据。在这种方式下,数据将易于安全地读取,排序和分页。您可以轻松地包括工具栏过滤或高级搜索或其他一些过滤搜索。只有在您提供jqGrid 纯数据时才能完成所有工作。

有关详细信息,请参阅the answer