1

したがって、現在2つのドロップダウンリストを使用しています。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 スプリング コントローラー クラス メソッドは次のとおりです。

 @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

私も同じ問題を抱えていました。親と子のドロップダウンリストを 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 に答える