Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XML视图中带有下拉框的SAPUI5复杂数据绑定示例_Xml_Json_Data Binding_Sapui5 - Fatal编程技术网

XML视图中带有下拉框的SAPUI5复杂数据绑定示例

XML视图中带有下拉框的SAPUI5复杂数据绑定示例,xml,json,data-binding,sapui5,Xml,Json,Data Binding,Sapui5,我构建了这个JSON(测试为有效)(…不介意这里的男性和女性名称相同:-): 在我的控制器中,我将JSON模型设置为整个视图,如下所示: // init instance of JSON model this.staffData = new sap.ui.model.json.JSONModel(); // load JSON file into model this.staffData.loadData("ajax-dummy/staff.json"); // bind model to wh

我构建了这个JSON(测试为有效)(…不介意这里的男性和女性名称相同:-):

在我的控制器中,我将JSON模型设置为整个视图,如下所示:

// init instance of JSON model
this.staffData = new sap.ui.model.json.JSONModel();
// load JSON file into model
this.staffData.loadData("ajax-dummy/staff.json");
// bind model to whole view 
this.getView().setModel(this.staffData);
在我的XML视图中,我现在想动态构建一个(嵌套的)下拉框 这应该让我选择,例如。 柏林->男->姓 所以我需要3个级别的列表项

第一个问题是:我可以用JS生成这个(为每个项目构建一个Listitem) 输入staff对象等),但我不知道如何在XML视图中处理这个问题。 现在看起来是这样的:

<content>
<DropdownBox id="dd-locations" editable="true">
<core:ListItem text="{/staff/berlin}"></core:ListItem>
</DropdownBox>
</content> 

当然,它在den下拉框中只显示“{object..}”,因为它是一个对象

甚至可以通过数据绑定在XML视图中进行构建吗?还是有更好的方法来组织 JSON?我知道ListItems需要一个数组。。。最后:如何嵌套列表项?有更好的控制吗 那我应该用下拉框吗

编辑: 我想要的是像在HTML中一样“只是”嵌套列表项。我试过了,例如:

<ComboBox>
                            <items>
                                <core:ListItem key="key2" text="text2"/>
                                <core:ListItem key="key3" text="text2">
                                    <ComboBox>
                                        <items>
                                            <core:ListItem key="key4" text="text3"/>
                                            <core:ListItem key="key5" text="text3"/>
                                            <core:ListItem key="key6" text="text3"/>
                                         </items>
                                    </ComboBox>
                                </core:ListItem>
                                <core:ListItem key="key4" text="text2"/>
                             </items>
                        </ComboBox>

但当发生错误时,会说:

未捕获错误:无法添加没有默认聚合的直接子级 为控制sap.ui.core.ListItem定义

如何为ListItem定义项聚合?这样行吗


非常感谢,ho

不确定这在您的案例中是否是一种理想的方法,但是考虑到您模型的层次性,也许您正在寻找“桌上面包屑”的示例:
它允许您“深入”到模型层次结构中,并在需要时进行备份

但我不确定它是否能适应“多级下拉框”

编辑:我对您的JSON进行了更深入的研究,似乎结构不正确。 要向多个下拉列表提供数据,数据应为数组格式,而不是对象格式。现在,您的JSON包含一个属性
staff
,其中包含多个属性
berlin
paris
等,而它应该是一个城市数组。我修改了您的JSON,因此
staff
属性包含一个对象数组,其中包含一个
gender
属性,其中包含一个对象数组,其中包含一个
person
属性,其中包含一个对象数组

此外,为了向“子”下拉列表提供正确的绑定,您可以在从下拉列表中选择条目时将绑定设置为正确的路径

请参见以下重构模型的工作片段(一组城市、一组性别和一组人群)以及下拉列表的重新绑定:

sap.ui.controller(“view1.initial”{
onInit:功能(oEvent){
var oModel=new sap.ui.model.json.JSONModel();
oModel.setData({
“工作人员”:[
{
“城市”:”
},
{
“城市”:“柏林”,
“性别”:[
{ 
“性别”:“男性”,
“人”:[
{“firstName”:“Lasse”,“lastName”:“Larsson”},
{“firstName”:“Gerrit”,“lastName”:“Gartner”}
]
},
{ 
“性别”:“女性”,
“人”:[
{“名字”:“巴黎”,“姓氏”:“希尔顿”},
{“姓”:“凯特”,“姓”:“厄普顿”}
]
},
]
},
{
“城市”:“巴黎”,
“性别”:[
{ 
“性别”:“男性”,
“人”:[
{“firstName”:“Lasse”,“lastName”:“Larsson”},
{“firstName”:“Gerrit”,“lastName”:“Gartner”}
]
},
{ 
“性别”:“女性”,
“人”:[
{“firstName”:“Lasse”,“lastName”:“Larsson”},
{“firstName”:“Gerrit”,“lastName”:“Gartner”}
]
},
]
},
{
“城市”:“奥斯陆”,
“性别”:[
{ 
“性别”:“男性”,
“人”:[
{“firstName”:“Lasse”,“lastName”:“Larsson”},
{“firstName”:“Gerrit”,“lastName”:“Gartner”}
]
},
{ 
“性别”:“女性”,
“人”:[
{“firstName”:“Lasse”,“lastName”:“Larsson”},
{“firstName”:“Gerrit”,“lastName”:“Gartner”}
]
},
]
},
]
});
this.getView().setModel(oModel);
},
HandleStaff选择:功能(oEvent){
变量生成器=this.byId(
<ComboBox>
                            <items>
                                <core:ListItem key="key2" text="text2"/>
                                <core:ListItem key="key3" text="text2">
                                    <ComboBox>
                                        <items>
                                            <core:ListItem key="key4" text="text3"/>
                                            <core:ListItem key="key5" text="text3"/>
                                            <core:ListItem key="key6" text="text3"/>
                                         </items>
                                    </ComboBox>
                                </core:ListItem>
                                <core:ListItem key="key4" text="text2"/>
                             </items>
                        </ComboBox>