SAP UI5 ComboBox值未显示在XML视图中

问题描述 投票:0回答:2

在我的component.js文件中,我实例化了oData模型并将其设置为donorList

 var oDonorTable = new sap.ui.model.odata.v2.ODataModel(sServiceUrl, true);
 this.setModel(oDonorTable, "donorList"); 

在我的视图控制器的onInit()中,我从后端实体集中读取组合框值并将其设置为视图模型:

 var oDnrDoc = this.getOwnerComponent().getModel();
 oDnrDoc.read("/DonorDocs", {
    success: function(oData) {
       var oDonorDocList =  new sap.ui.model.json.JSONModel();  
       oDonorDocList.setData(oData);
       this.getView().setModel(oDonorDocList, "donorList");
    }.bind(this),
    error: function(oError) {
      //MessageToast.show("Read Failed");
    }
});

在我的XML视图中,我将oData值绑定到XML视图中的ComboBox:

<ComboBox items="{path: 'donorList>/results'}">
    <c:ListItem key="{DocCode}" text="{DocDesc}"/>
</ComboBox> 

我有来自后端oData服务的'9个键值对',用于实体集'DonorDocs'。但是,在XML视图中进行渲染时,通过单击下拉菜单选择组合框下拉列表时,尽管组合框下拉列表中填充了9条记录,但我在视图中看不到结果(仅显示空值)(类似可以看到9条记录,但它们不可见)

空下拉列表显示(9条记录)

enter image description here

我可以感觉到一些绑定问题...大括号中的动态变量是否引起问题?有语法问题吗?

javascript xml odata sapui5 sap
2个回答
1
投票

由于您已将模型命名为donorList,因此必须在绑定中使用该名称。

<ComboBox items="{path: 'donorList>/results'}">
    <c:ListItem key="{donorList>DocCode}" text="{donorList>DocDesc}"/>
</ComboBox> ````


0
投票

在我控制器的onInit中,我从后端读取值并将其设置为JSONModel [...]。我可以感觉到一些有约束力的问题。有语法问题吗?

添加模型名称({donorList>DocCode})应该可以解决Dommy的答案中提到的问题,但是应该更加关注一些问题:缺少ODataModel的现有功能,但是尝试通过使用JSONModel重新实现它们JSONModel

具有JSON格式的OData响应可能很想用JSONModel处理数据,但我想强调的是ODataModel是客户端模型。这是一个简单的模型实现不知道服务实现建议的任何合同(例如OData或FHIR)。

<!-- "donorList" == ODataModel --> <!-- "DonorDocs" == entity set name --> <ComboBox items="{donorList>/DonorDocs}"> <c:ListItem key="{donorList>DocCode}" text="{donorList>DocDesc}" /> </ComboBox> <!-- No oODataModel.read(...) in the controller --> 是服务器端模型,是为处理OData标准(V2或V4)的应用程序明确建立的。这可能会花费很多工作。例如,在我们的例子中,只需绑定实体集without中间JSONModel:

ODataListBinding

ODataListBinding(源自items="{donorList>/DonorDocs}")将为您格式化并自动发送请求。


[使用普通的JSONModel构建整个应用程序之前,请继续探索UI5对OData的作用。

© www.soinside.com 2019 - 2024. All rights reserved.