2011-12-17 6 views
1

ナビゲータボタンを使用して行が追加された場合、追加のPOSTキーをコントローラに追加する方法?jqgrid、追加ナビゲータボタンを使用して行を追加するときのデータの受け渡し方法

フォーム値で_dokdataを渡すために以下のコードを試しましたが、_dokdataは サーバーのコントローラに渡されません。

$("#grid").jqGrid('inlineNav', '#grid_toppager', { 
    addParams: { 
    useDefValues : true, 
    useFormatter : false, 
    addRowParams : { 
     extraparam : { _dokdata : FormData }, 
     editData: { _dokdata: FormData }, 
     }, 
    editData: { _dokdata: FormData }, 
    extraparam : { _dokdata : FormData }, 
    }, 

    add: true, 
    edit: false, 
    save: true, 
    cancel: true, 
    editParams : {} 
    }); 

function FormData() { 
    return JSON.stringify($("#_form").serializeArray()); 
} 
+0

コードの前に '<! - language:lang-js - >'の位置が固定されています。これでコードがJavaScript固有の色でフォーマットされることがわかりました。追加のjqueryタグやjavascriptタグを使用する場合は、(<! - language:lang-js - >)を追加する必要はありません。 – Oleg

答えて

4

あなたが記述問題は、あなたのコードとjqGridのコードのバグの小さなエラーからミックス(行はthe placeで始まる参照)であるようです。

addParamsのように正しくeditParamsを設定しないと、コードの問題が発生します。正しい使用方法は、次のようになります。

$("#grid").jqGrid('inlineNav', '#grid_toppager', { 
    addParams: { 
     useDefValues: true, 
     addRowParams: { 
      keys: true, 
      extraparam: { _dokdata: FormData } 
     } 
    }, 
    editParams: { 
     extraparam: { _dokdata: FormData } 
    }, 
    add: true, 
    edit: false, 
    save: true, 
    cancel: true 
}); 

function FormData() { 
    return JSON.stringify($("#_form").serializeArray()); 
} 

jqGridのコードの現在のバージョンで問題が 保存]ボタンで使用しjqGrid私の意見である(hereを参照)editParams.extraparamの設定のみが代わりに使用されていますaddParams.addRowParams.extraparamのようなものの使用。私は、addParams.addRowParamsのパラメータにkeys: trueオプションを追加しました。inlineNavです。したがって、ユーザがを入力して変更を保存する場合、jqGridの現在の実装(v 4.3.0)はになります。を入力し、その行を保存する場合はeditParams.extraparamを使用しますナビゲータボタン。

更新済み:コードをテストし、jqGrid v。4.3.0にもう1つのバグが見つかりました。私はthe feature request$.jgrid.inlineEditの設定を紹介しました。これは他の非常に実用的な設定$.jgrid.editのように使用できますが、インラインでフォーム編集の場合は使用できます。機能リクエストは、jqGrid 4.3.0の に実装されていますが、実装にはバグがあります。

は1つが正しくバグ修正の後、 the demoからすべての作業を見ることができますどのように

o = $.extend(true, {}, settings, $.jgrid.inlineEdit, args[0]); 

33117304

o = $.extend($.jgrid.inlineEdit, settings, args[0]); 

から行を交換する必要がありますバグを修正します。

更新2:上記の修正は、まだ間違っているthe fixと同じです。バグを修正するには、コードをさらに変更する必要があります。例えば32-36editRowの内部)線は、例えば線116-120

if(args[0] && typeof(args[0]) == "object" && !$.isFunction(args[0])) { 
    o = $.extend($.jgrid.inlineEdit, settings, args[0]); 
} else { 
    o = settings; 
} 
saveRowの内側)同様に

if(args[0] && typeof(args[0]) == "object" && !$.isFunction(args[0])) { 
    settings.keys = false; // keys is args[0] and it's an object 
    o = $.extend(true, {}, settings, $.jgrid.inlineEdit, args[0]); 
} else { 
    o = settings; 
} 

を以下に

if(args[0] && typeof(args[0]) == "object" && !$.isFunction(args[0])) { 
    o = $.extend($.jgrid.inlineEdit, settings, args[0]); 
} else { 
    o = settings; 
} 

から変更することができます

012に変更できます

とライン304

o = $.extend($.jgrid.inlineEdit, settings, args[0]); 

が更新

o = $.extend(true, {afterrestorefunc: null}, $.jgrid.inlineEdit, args[0]); 

に変更することができます:私は、 "削除" 問題についてtrirandするmy suggestionを掲載しました。修正hereを使用する同じデモを参照してください。

+0

ありがとうございます。私は試しましたが、キーを入力してインラインでの追加を終了しません。追加された行を保存するにはどうすればよいですか? – Andrus

+0

@Andrus:これは最初の小さな型付けエラーでした: 'keys:true'の代わりに' key:true'を使いました。より重要なのは、私の答えの "UPDATED"部分に対応するバグ修正と一緒に記述するバグです。 – Oleg

+0

IE9では、最新のデモで[追加]ボタンを押し、クライアント名を入力してEnterキーを押しました。ツールバーの[保存してキャンセル]ボタンはまだ有効です。成功した後にそれらを無効にする方法を入力しますか?追加時にエラーが発生すると、行が追加されなくなります。ユーザーがデータを修正できるようにエラーを追加するには、インライン追加モードを維持するにはどうすればよいですか?またcreateContexMenuFromNavigatorButtonsは定義されていません – Andrus

関連する問題