在我的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条记录)
我可以感觉到一些绑定问题...大括号中的动态变量是否引起问题?有语法问题吗?
由于您已将模型命名为donorList
,因此必须在绑定中使用该名称。
<ComboBox items="{path: 'donorList>/results'}">
<c:ListItem key="{donorList>DocCode}" text="{donorList>DocDesc}"/>
</ComboBox> ````
在我控制器的
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的作用。