jqgrid dataurl完成事件

时间:2012-11-23 05:08:52

标签: javascript jquery jqgrid

我正在使用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);
        });
    }

1 个答案:

答案 0 :(得分:1)

您没有发布您使用的jqGrid的定义。执行上述代码的上下文也不太清楚。你之前从当前选定的行获得rowData吗?你在哪里定义它?

尽管如此,我认为你走的是正确的方向,并且你已经找到了解决问题的正确方法。使用complete ajaxSelectOptions回调可能是您可以使用的唯一方法。你写了一些“冲突”,但没有发布更多细节。

我建议您检查this回调中complete的属性。 jqGrid设置了context来电的$.ajax选项(请参阅the line)(与您自己找到的the answer完全一样)。因此,您可以在this.elem回调中使用this.optionsthis.vlcomplete。如果编辑现有行,则this.vl是来自单元格的值。通常,它是将被选中的选项的名称。 this.options具有您可以使用的树重要属性:this.options.dataUrlthis.options.idthis.options.name。在表单编辑的情况下,值this.options.idthis.options.name相同。如果是内联编辑this.options.id,则会有rowid和_ ad前缀。它使您可以在complete回调中针对您使用dataUrl的不同选择执行不同的代码。

还有一句话。在大多数情况下,您可以从setColProp移除beforeInitData来电并使用the answerthe 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"}该网址将附加partid参数(请参阅上面的代码)。您可以使用id代替getRowData来获取基于当前所选行的rowid的其他列中的内容。