我正在使用jQuery获取部件号的供应商列表。 然后,我想在编辑表单出现后加载一些关于供应商/部件号组合的额外数据。问题是在beforeShowForm方法执行之前,dataurl方法(我在beforeInitData方法中调用)来获取供应商没有完成。因此,当表单首次加载时,我没有供应商查找。有没有办法在dataUrl方法完成后运行该函数以获取额外的数据?
我已经尝试了JQGrid editoptions dataurl not using 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);
});
}
答案 0 :(得分:1)
您没有发布您使用的jqGrid的定义。执行上述代码的上下文也不太清楚。你之前从当前选定的行获得rowData
吗?你在哪里定义它?
尽管如此,我认为你走的是正确的方向,并且你已经找到了解决问题的正确方法。使用complete
ajaxSelectOptions
回调可能是您可以使用的唯一方法。你写了一些“冲突”,但没有发布更多细节。
我建议您检查this
回调中complete
的属性。 jqGrid设置了context
来电的$.ajax
选项(请参阅the line)(与您自己找到的the answer完全一样)。因此,您可以在this.elem
回调中使用this.options
,this.vl
和complete
。如果编辑现有行,则this.vl
是来自单元格的值。通常,它是将被选中的选项的名称。 this.options
具有您可以使用的树重要属性:this.options.dataUrl
,this.options.id
,this.options.name
。在表单编辑的情况下,值this.options.id
和this.options.name
相同。如果是内联编辑this.options.id
,则会有rowid和_
ad前缀。它使您可以在complete
回调中针对您使用dataUrl
的不同选择执行不同的代码。
还有一句话。在大多数情况下,您可以从setColProp
移除beforeInitData
来电并使用the answer和the another one中建议的方法:
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"}
该网址将附加part
和id
参数(请参阅上面的代码)。您可以使用id
代替getRowData
来获取基于当前所选行的rowid的其他列中的内容。