在我的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条记录,但我在视图中看不到结果(仅显示空值)。
我可以感觉到一些绑定问题...花括号中的动态变量是否引起问题?有语法问题吗?
由于您已将模型命名为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的作用。