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