1

ユーザーが編集しているか追加しているかに基づいて、異なるソースIDを提供する必要がある場合があります。私の最初のアイデアは、beforeShowFormフックを使用して非表示フィールドの値を設定することでしたが、フックの関数が呼び出される前にコンポーネントが初期化されるようです。したがって、初期化のその段階でどのモデルが作成されているかを判断できません。

[A]

//initLoadNoEdit gets called... (At this point I need to know if its going to be an add/edit.)
initLoadNoEdit = function (elem) {
    if ($('#curr_action').val() == 'add') {
        createLoadNumberWidget(elem, "#Date", 'some_url');
    } else {
        createLoadNumberWidget(elem, "#modal_date", 'some_url');
    }
}

var colModel = [
        { name: 'FI_ID', index: 'FI_ID', key: true, editable: false, hidden: true, search: false },     
        { name: 'LILBP_ID', index: 'LILBP_ID', editrules: { required: true }, editoptions: { dataInit: initLoadNoEdit } }
];

//...before this gets called
var addBeforeShowOptions = function (form) {
    $('#curr_action').val('add');
}

//...or this
var editBeforeShowOptions = function (form) {
    $('#curr_action').val('edit');
}

次に、グリッドのボタン追加/編集クリックでクリック時イベントを追加しようとしました。.live()、. delegate()、および通常の.click()だけを試しました。ただし、結果がない場合、ページャーは次のようにレンダリングします。

[B]

   <td id="pager_left" align="left">
      <table cellspacing="0" cellpadding="0" border="0" class="ui-pg-table navtable" style="float:left;table-layout:auto;">
       <tbody>
        <tr>
          <td class="ui-pg-button ui-corner-all" title="Add new row" id="add_theGrid">
              <div class="ui-pg-div">
                 <span class="ui-icon ui-icon-plus"></span>
              </div>
          </td>
        </tr>
       </tbody>
      </table>
    </td>

だから私は次のようなものを試しました

 $('#add_theGrid').live('click', function () { $('#curr_action').val('add'); }); 

 //and

 $('#pager_left').delegate('#add_theGrid','click', function () { $('#curr_action').val('add'); });

そうは言っても...変数に値を渡すことがこれを行うための最良の方法だとは思いません。モーダルから、どのタイプのモーダルであるかを判断する方法があるはずだからです。は?まだ見つけられませんでした。

4

2 に答える 2

2

フォームのタイトルテキストは、追加と編集で異なる必要があります。

jQuery('.ui-jqdialog-title').text()

次に、その前面で「追加」または「編集」を確認できます。明らかにこれは理想的な解決策ではありませんが、すでにフォームにあるデータを使用する簡単な方法です。しかし、それはちょっとしたハックだと思います。


より良い解決策は、jqGridAddEditBeforeInitData以前に発生したイベントを使用することですdataInitこれは、4.3.2で新しくトリガーされたイベントの1つです。ドキュメントは少しまばらですが、のコードをgrid.formedit.js見るとfrmoper、フォームが「追加」モードか「編集」モードかを示すパラメーターが渡されていることがわかります(読みやすくするために改行を追加しました)。

showFrm = $($t).triggerHandler(
            "jqGridAddEditBeforeInitData", 
            [$("#"+frmgr), frmoper]);

triggerHandlerのjQueryドキュメントによると、2番目のパラメーターは追加のパラメーターのリストです。次に、を使用bindして独自のイベントハンドラーを追加できます。

grid.bind('jqGridAddEditBeforeInitData', function(e, form, oper) {
    alert ("Before dataInit, operation is " + oper);
    // Your code here...
});

それは役に立ちますか?

于 2012-07-23T14:31:43.677 に答える
0

jqGrid Navigatorを使用している場合は、addfunc、editfunc、およびdelfuncオプションを使用して簡単に行うことができます。このようにして、すべてのアクションにカスタム関数を割り当てることができます。インライン編集の場合は、インラインであるため追加されていないことがわかります。

チェック: http ://www.trirand.com/jqgridwiki/doku.php?id = wiki:navigator

例が必要な場合は、私が編集できるjsfiddleを投稿してください。

于 2012-07-23T15:19:41.463 に答える