1

我正在使用 jQuery 获取零件编号的供应商列表。然后,一旦出现编辑表单,我想加载一些关于供应商/零件号组合的额外数据。问题是获取供应商的 dataurl 方法(我在 beforeInitData 方法中调用)在 beforeShowForm 方法执行之前没有完成。因此,当表单首次加载时,我没有要查找的供应商。有没有办法在 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

再说一句。在大多数情况下,您可以从中删除 call ofsetColPropbeforeInitData使用答案中建议的方法和另一种方法:

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 将附加partid参数(参见上面的代码)。id例如,您可以使用getRowData基于当前选定行的 rowid 从其他列获取内容,而不是。

于 2012-11-23T08:49:11.880 回答