XML视图中带有下拉框的SAPUI5复杂数据绑定示例
我构建了这个JSON(测试为有效)(…不介意这里的男性和女性名称相同:-): 在我的控制器中,我将JSON模型设置为整个视图,如下所示: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
// 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>