1

と で列を編集するedittype: selectmultiple: true、jqGrid はデータをコンマ区切り値としてサーバーに送信します。コンマ区切り値の代わりに配列を返すこの特定の列にイベントをバインドすることは可能ですか?

serializeEditDataイベントの使用は避けたいので、

  1. これはグリッド固有のものであり、列固有のものではなく、私にとっては問題になるでしょう-列ロジックをグリッドロジックから分離しようとしています
  2. 配列を文字列に変換し、文字列をまったく同じ配列に変換するのは良い考えのようには思えません。
4

1 に答える 1

2

edittype: 'custom'ケースで使用し、 のカスタム実装custom_elementとのcustom_valueメソッドを提供する必要があると思いますeditoptions。カスタム入力要素からの値を読み取る必要がある場合、jqGrid はcustom_valueパラメーター パラメーターを使用してメソッドを呼び出し'get'ます。メソッドの実装はcustom_value、ケース内の項目の配列を返す可能性があります。

一般に、複数選択の入力であるデータの配列を表示できるようにするカスタム フォーマッタを実装する必要があることを理解することが重要です。幸いなことformatter: "select"、ラインがあります

cellval = cellval + "";

配列をカンマ区切りの項目に変換します。.join(",")この行により、配列は を使用して文字列に変換され、formatter: "select"配列を入力として正常に受け入れます。

デモ

ここに画像の説明を入力

上記のアプローチを示します。次のコードを使用します。

{
    name: "Subcategory",
    width: 250,
    formatter: "select",
    edittype: "custom",
    editoptions: {
        value: {"1": "football", "2": "formula 1", "3": "physics", "4": "mathematics"},
        custom_element: function (value, options) {
            return $.jgrid.createEl.call(this, "select",
                $.extend(true, {}, options, {custom_element: null, custom_value: null}),
                value);
        },
        custom_value: function ($elem, operation, value) {
            if (operation === "get") {
                return $elem.val();
            }
        },
        multiple: true
    }
}

上記のコード$.jgrid.createElでは、jqGrid の既存のコードで複数値の選択を作成するために使用します。必要な唯一のことは、 setAttributesからのメソッドの不要な呼び出しを防ぐためにオプションをcustom_element削除することです。コードを変更して除外属性のリストにと を含めると、式は に縮小できます。custom_valuesetAttributes"custom_value""custom_element"$.extend(true, {}, options, {custom_element: null, custom_value: null})options

<select>を使用する場合とほぼ同じ方法で取得しedittype: "select"ます。違いは次の 2 つだけです。

  • <select>内部で作成された要素edittype: "custom"には追加の属性がありますclass="customelement"
  • <select>内部で作成された要素は、の内部でedittype: "custom"ラップされます (直接の子になります)。<span class="editable">...</span>

このような違いは、私たちの場合は重要ではないようです。

更新:setAttributesメソッドのコードは、gtihub の jqGrid のメイン コードで修正されました (提案commit を参照してください)。したがって、jqGrid の次のバージョン (4.4.1 以降) では、コードを次のように削減できますcustom_element

custom_element: function (value, options) {
    return $.jgrid.createEl.call(this, "select", options, value);
}

対応するデモを参照してください。

于 2013-01-18T21:47:16.940 に答える