2

関数に関しては、jqGrid 4.3.1のドキュメントとソースコードを調べていましたが、HTMLテーブルレイアウトから構築されているため、オブジェクトに含まれている場合はとが無視されるtableToGrid()ことがわかりました。ColModelColNamesoptions

私の質問は、特にテーブルの列が事前にわかっている場合、HTMLテーブルからそれらを構築するのではなく、tableToGrid()これらの2つの配列を強制的に受け入れる方法があります。(ColModel,ColNames)

コードを調べたところ、次のコードでこの部分が見つかりました。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。

4

1 に答える 1

0

主な問題は、まったく使用していないことだと思いますtableToGrid。一般的な使用法やアーキテクチャに関する質問は、技術的な質問として見つけます。

数字、日付、通貨などのデータを入力した場合、たとえば jqGrid によってデータが正しくソートされることを望むでしょう。HTML テーブルからローカライズされたデータを解析し、データのフォーマットを解除することは、最善の方法ではありません。jqGridを直接作成すると、時間を節約できます。パラメータに入力データを指定する必要がありdataます。このようにして、データは簡単かつ安全に読み取られ、ソートされ、ページングされます。ツールバーのフィルタリング、高度な検索、またはその他のフィルタリングの検索を簡単に含めることができます。jqGrid の純粋なデータを提供する場合にのみ、すべてがうまく機能します。

詳細については、回答を参照してください。

于 2012-04-04T20:12:17.687 に答える