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);
});
}