jqgrid dataurl完成事件
我正在使用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); }); }
你没有找到你使用的jqGrid的定义。 执行上述代码的上下文也不太清楚。 你从当前选定的行之前获得rowData
吗? 你在哪里定义它?
尽管如此,我认为你走的是正确的方向,并且你已找到解决问题的正确方法。 使用complete
回调ajaxSelectOptions
可能是您可以使用的唯一方法。 你写了一些“冲突”,但没有发布更多细节。
我建议你检查complete
回调内部的属性。 jqGrid设置$.ajax
调用的context
选项(参见行 )(与您自己已经找到的答案完全相同)。 所以你可以在complete
回调中使用this.elem
, this.options
和this.vl
this.vl
是编辑现有行时来自单元格的值。 通常,它是将被选中的选项的名称。 this.options
具有树重要属性,您可以使用: this.options.dataUrl
, this.options.id
, this.options.name
。 在表单编辑的情况下, this.options.id
和this.options.name
的值相同。 this.options.id
联编辑的情况下, this.options.id
将具有rowid和_
ad前缀。 它使您可以在complete
回调内执行不同的代码,以便在使用dataUrl
进行不同的选择。
再说一遍。 在大多数情况下,您可以从beforeInitData
删除setColProp
调用,并使用答案中建议的方法和另一个 :
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"}
该URL将附加part
和id
参数(请参阅上面的代码)。 例如,您可以使用getRowData
来获取基于当前所选行的rowid的其他列的内容,而不是id
。