1

所以我目前使用 2 个下拉列表,其中第二个应该根据从第一个中选择的项目从服务器获取项目,问题是这仅在我第一次单击子下拉列表时有效,这意味着如果我更改父列表项孩子仍然会显示以前的项目。

这是一些代码:

   kendofi=function (index){
    //kendofi select boxes
    $("#dynamicFormLinha"+index).kendoDropDownList({
        name:"formularios",
        optionLabel: "Formulario",
        dataTextField: "name",
        dataValueField: "id",
        dataSource: {
            type: "json",
            serverFiltering: true,
            transport: {
                read: "${pageContext.request.contextPath}" + "/newlayout/mySearchesDynForms.do"
            },
            schema: {
                model: {
                    fields: {
                        id: { type: "number" },
                        name: { type: "string" }
                    }
                }
            }
        }
    }).data("kendoDropDownList");

    $("#campoFormLinha"+index).kendoDropDownList({
        autoBind:false,
        name:"campos",
        optionLabel: "Campo",
        dataTextField: "name",
        dataValueField: "id",
        dataSource: {
            type: "json",
            serverFiltering:true,
            transport: {

                read:{
                    url:"${pageContext.request.contextPath}" + "/newlayout/mySearchesFormFieds.do",
                    data:function(){

                        return {formId: $("#dynamicFormLinha"+index).val()
                        };
                    }
                }
            }
        },
        cascadeFrom: "dynamicFormLinha1",
        schema: {
            model: {
                fields: {
                    id: { type: "number" },
                    name: { type: "string" }
                }
            }
        }
    }).data("kendoDropDownList");

这是每个下拉列表的 java spring 控制器类方法:

 @RequestMapping(method = RequestMethod.GET, value="/newlayout/mySearchesDynForms")
public @ResponseBody
DynamicFormTemplateDPO[] getForms(){
 return  dynamicFormService.getAllActiveFormTemplatesForPresentation();
}

@RequestMapping(method = RequestMethod.GET, value="/newlayout/mySearchesFormFieds")
public @ResponseBody
DynamicFieldTemplateDPO[] getFormFields(@RequestParam long formId){
    return dynamicFormService.getFormFields(formId);
}

这些都返回 json 数据,父子返回:

[{"id":1,"name":"drcie"},{"id":2,"name":"edp"},{"id":3,"name":"pt"}]

然后将选择的 id 用作 getFormFields 方法中的 formId 参数,该方法返回如下内容:

[{"id":1,"name":"Nome","type":"STRING"},{"id":2,"name":"Morada","type":"STRING"},{"id":3,"name":"Contribuinte","type":"STRING"},{"id":4,"name":"Multibanco","type":"STRING"}]

这里的 kendofi 方法是因为这些小部件位于表格内,您可以在维护小部件功能的同时添加新的表格行。

4

1 回答 1

1

我有同样的问题。我们设法通过将父级和子级下拉列表放在一个函数中来解决这个问题。请参阅下面的 buildLookupDropDownList() 函数。看起来在我们的情况下,子下拉列表在父级之前被调用。祝你好运

var categories
function buildLookupDropDownList() {
    categories = $("#LOOKUP_OBJECT_ID").kendoDropDownList({
        optionLabel: "@Resources.Global.Builder_Parameter_SelLookup",
        dataTextField: "OBJECT_NAME",
        dataValueField: "OBJECT_ID",
        dataSource: lookupDS,
    }).data("kendoDropDownList");

    var products = $("#DISPLAY_FIELD").kendoDropDownList({
        autoBind: false,
        cascadeFrom: "LOOKUP_OBJECT_ID",
        optionLabel: "@Resources.Global.Builder_Parameter_SelDisplay",
        dataTextField: "DISPLAY_LABEL",
        dataValueField: "FIELD_NAME",
        dataSource: {
            serverFiltering: true,
            transport: {
                read:
                    {
                        url: '@Url.Action("GetFields", "Object")',
                        type: "GET",
                        contentType: "application/json; charset=utf-8",
                        dataType: "json",
                        data: function () {

                            var lookuplist = $("#LOOKUP_OBJECT_ID").data("kendoDropDownList");
                            return { OBJECT_ID: lookuplist.value() };
                        }
                    }
            },
            schema: {
                data: function (data) { //specify the array that contains the data
                    return data.data || data;
                }
            }

        }
    }).data("kendoDropDownList");

    var orders = $("#VALUE_FIELD").kendoDropDownList({
        autoBind: false,
        cascadeFrom: "DISPLAY_FIELD",
        optionLabel: "@Resources.Global.Builder_Parameter_SelValue",
        dataTextField: "DISPLAY_LABEL",
        dataValueField: "FIELD_NAME",
        dataSource: {
            serverFiltering: true,
            transport: {
                read:
                    {
                        url: '@Url.Action("GetFields", "Object")',
                        type: "GET",
                        contentType: "application/json; charset=utf-8",
                        dataType: "json",
                        data: function () {

                            var lookuplist = $("#LOOKUP_OBJECT_ID").data("kendoDropDownList");

                            return { OBJECT_ID: lookuplist.value() };
                        }
                    }
            },
            schema: {
                data: function (data) { //specify the array that contains the data
                    return data.data || data;
                }
            }

        }
    }).data("kendoDropDownList");
}
于 2014-07-11T11:10:25.330 回答