1

jQuery を使用して、部品番号のサプライヤーのリストを取得しています。次に、編集フォームが表示されたら、サプライヤーと部品番号の組み合わせに関する追加データを読み込みたいと思います。問題は、beforeShowForm メソッドが実行される前に、サプライヤーを取得する dataurl メソッド (beforeInitData メソッドで呼び出している) が完了しないことです。したがって、フォームが最初に読み込まれたときに検索するサプライヤーがありません。dataUrl メソッドが完了して追加データを取得した後に関数を実行する方法はありますか?

JQGrid editoptions dataurlを試しましたが、ajax get を使用していませんか? うまくいきましたが、リクエストごとに ajaxSelectOptions メソッドが呼び出され、リクエストがさまざまな要件を持つさまざまな場所から送信されることがあるため、競合が発生することはわかっています。

グリッドに使用しているコードは次のとおりです。

jQuery("#receiptPartsTable").jqGrid('editGridRow',"new",
{
    height:400,
    width:800,
    reloadAfterSubmit:false,
    recreateForm: true,
    beforeInitData: function(form)
    {
        var selectedPart = rowData.part;
        var selectedPartQty = rowData.qty;
        //Getting list of suppliers
        $("#receiptPartsTable").jqGrid('setColProp', 'supplier', { editoptions:{dataUrl:'getSuppliersForPart.php?part=' + rowData.part} });
    },
    beforeShowForm: function(form)
    {
        var selectedPart = rowData.part;
        var selectedPartQty = rowData.qty;
        $('#part').val(selectedPart);
        $('#qty').val(selectedPartQty);

        //$('#supplier').val() is not set yet; 
        var supplier = $('#supplier').val(); 

        //This method is getting called before there is a supplier
        getPartDetails(rowData.part, supplier);

        //Set up onChange listener. After selecting a supplier, get the part details
        $('#supplier').change(function() {
            var supplier = $('#supplier').val();
            getPartDetails(selectedPart, supplier);
        });
    }
4

1 に答える 1

1

使用する jqGrid の定義を投稿しませんでした。上記のコードを実行するコンテキストも明確ではありません。rowData現在選択されている行から前に取得しますか? どこで定義しますか?

それにもかかわらず、あなたは正しい方向に進み、問題を解決する正しい方法をすでに見つけたと思います。completeのコールバックの使用は、ajaxSelectOptionsおそらく使用できる唯一の方法です。いくつかの「競合」について書きましたが、詳細は投稿していません。

thisコールバック内のプロパティを調べることをお勧めしcompleteます。jqGridは、呼び出しのcontextオプションを設定します(を参照) (すでに自分で見つけた回答$.ajaxとまったく同じです)。したがって、コールバック内で、およびを使用できます。既存の行を編集する場合のセルの値です。通常、これは選択されるオプションの名前です。使用できるツリーの重要なプロパティがあります: 、、。フォーム編集の場合は値と同じです。インライン編集の場合、rowid とthis.elemthis.optionsthis.vlcompletethis.vlthis.optionsthis.options.dataUrlthis.options.idthis.options.namethis.options.idthis.options.namethis.options.id_接頭辞を付けます。completeを使用するさまざまな選択に対して、コールバック内でさまざまなコードを実行する可能性を提供しますdataUrl

もう1つの発言。ほとんどの場合、setColPropからの呼び出しを削除し、回答beforeInitDataで提案されているアプローチとのアプローチを使用できます。

ajaxSelectOptions: {
    data: {
        id: function () {
            return $("#receiptPartsTable").getGridParam('selrow');
        },
        part: function () {
            return rowData.part;
        }
    },
    complete: function (jqXHR, textStatus) {
        var columName = this.options.name, response = jqXHR.responseText;
        ...
    }
}

editoptions: {dataUrl: "getSuppliersForPart.php"}The URL will be appended with partand idparameters (上記のコードを参照)のみを使用できます。たとえば、現在選択されている行のrowidに基づいて、他の列からコンテンツを取得するためにid使用できます。getRowData

于 2012-11-23T08:49:11.880 に答える