2

当涉及到tableToGrid()函数时,我正在浏览 jqGrid 4.3.1 的文档和源代码,我发现ColModelandColNames被包含在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());
    }
});

但是,我的 hack 会考虑这些更改

    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.

4

1 回答 1

0

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

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

有关更多信息,请参阅答案

于 2012-04-04T20:12:17.687 回答