したがって、現在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 メソッドは、これらのウィジェットがテーブル内にあり、ウィジェットの機能を維持しながら新しいテーブル行を追加できるためです。