ComboBox值未显示在XML视图中

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

在我的Component.js文件中,实例化我的OData模型并将其设置为"donorList"

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

在我的视图控制器的onInit中,我从后端读取值并将其设置为JSONModel:

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

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

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

我有九个来自后端OData服务的键值对,用于实体集“ DonorDocs”。但是,在XML视图中进行渲染时,从下拉列表中进行选择时,尽管组合框下拉列表中填充了9条记录,但我在视图中看不到结果(仅显示空值)。

Empty dropdown display (nine records)

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

sapui5
2个回答
1
投票

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

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


1
投票

在我控制器的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.