SAPUI5:Select Box动态绑定OData服务数据失败问题
解决OData数据绑定到Select Box的问题
看起来你已经搞定了OData模型的配置,也能在控制台拿到数据,但就是没法把数据绑定到Select Box上——这种情况我碰到过好多次,咱们一步步来排查和解决。
先梳理你代码里可能的问题点
从你给出的片段来看,你创建了noModel这个JSONModel但没用到,大概率是混淆了ODataModel和JSONModel的使用逻辑;另外你的filter代码没写完,咱们先把这些补全,再调整绑定逻辑。
方案1:直接用XML视图绑定(推荐)
如果你的视图是XML写的,直接在SelectBox标签里配置绑定是最简洁的方式,不用写太多JS代码:
<SelectBox id="vendorSelectBox" items="{ path: '/YourEntitySetName', <!-- 替换成你OData服务里的实体集名称 --> model: 'rulelist', filters: [ { path: 'Zid', operator: 'EQ', value1: '0' }, { path: 'Zidentifier1', operator: 'EQ', value1: 'Default Vendor' }, { path: 'Zidentifier2', operator: 'EQ', value1: '111111' } ] }"> <!-- 替换成你数据里实际的key和显示文本字段 --> <core:Item key="{ZvendorId}" text="{ZvendorName}" /> </SelectBox>
方案2:用JS代码手动绑定
如果必须在控制器里处理绑定,按下面的步骤来:
// 1. 获取SelectBox控件和OData模型 var oSelectBox = this.getView().byId("vendorSelectBox"); var oODataModel = this.getView().getModel("rulelist"); // 2. 完善你的过滤条件 var aFilter = [ new sap.ui.model.Filter("Zid", sap.ui.model.FilterOperator.EQ, "0"), new sap.ui.model.Filter("Zidentifier1", sap.ui.model.FilterOperator.EQ, "Default Vendor"), new sap.ui.model.Filter("Zidentifier2", sap.ui.model.FilterOperator.EQ, "111111") ]; // 3. 给SelectBox绑定items oSelectBox.bindItems({ path: "/YourEntitySetName", <!-- 替换成实际的实体集名称 --> model: "rulelist", filters: aFilter, template: new sap.ui.core.Item({ key: "{ZvendorId}", <!-- 替换成数据里的唯一标识字段 --> text: "{ZvendorName}" <!-- 替换成要显示的文本字段 --> }) });
关键排查点
- 检查OData请求是否正常:打开浏览器开发者工具的Network标签,找到对应的OData请求,确认返回的
results数组里有数据,字段名称和你绑定的一致(OData区分大小写)。 - 不要混淆模型类型:你已经有了
rulelist这个OData模型,不需要额外创建JSONModel中转数据,直接用OData模型绑定即可。 - 确认绑定路径正确:实体集名称、字段名称必须和OData服务的元数据完全匹配,比如如果实体集是
VendorSet,就不能写成vendorset。 - 检查SelectBox的Item模板:
key和text对应的字段必须是数据里存在的属性,不能写错字段名。
如果还是不行,你可以把浏览器Network里的OData请求返回结果贴出来,或者XML视图里的SelectBox代码,我再帮你细化排查。
内容的提问来源于stack exchange,提问作者Arti
相关产品推荐
相关产品推荐

