Что не получается в моем каскадном выпадающем списке кендо. Работает только в первый раз

Итак, в настоящее время я использую 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"}]

Затем выбранный идентификатор используется в качестве параметра formId в методе getFormFields, который возвращает что-то вроде этого:

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

Метод кендофи здесь заключается в том, что эти виджеты находятся внутри таблицы, и вы можете добавлять новые строки таблицы, сохраняя при этом функциональность виджетов.


person Maxrunner    schedule 27.03.2014    source источник


Ответы (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");
}
person user3447136    schedule 11.07.2014
comment
Извините за поздний ответ, я думаю, что мне удалось заставить его работать, удалив свойство имени, это вызывало некоторые проблемы ... но я плохо отмечу ответ вам, так как я должен был сделать свой собственный ответ .... - person Maxrunner; 17.07.2014