我有下一期:
我正在尝试将XML数据响应绑定到XML视图中的sap.m.Select,但我没有成功绑定。
我在视图中有两个选择选项,一个是直接从后端绑定,但是当我从第一个选择中选择一个时我需要对另一个服务进行oData读取以显示第一个选择中所选值的详细信息
我的代码看起来像这样:
detalleSelect: function(oEvent) {
var id = oEvent.getSource();
var catalogo, codGrupo;
switch (id.getId()) {
case "__xmlview0--objeto_grupo":
catalogo = "B";
var codGrupo = this.getView().byId("objeto_grupo").getSelectedKey();
break;
case "__xmlview0--sintoma_grupo":
catalogo = "C";
var codGrupo = this.getView().byId("sintoma_grupo").getSelectedKey();
break;
case "__xmlview0--causa_grupo":
catalogo = "5";
var codGrupo = this.getView().byId("causa_grupo").getSelectedKey();
break;
default:
}
this.selectOdataFill(catalogo, codGrupo);
},
selectOdataFill: function(catalogo, codGrupo) {
var comboDetalle;
switch (catalogo) {
case "B":
comboDetalle = "objeto_detalle";
break;
case "C":
comboDetalle = "sintoma_detalle";
break;
case "5":
comboDetalle = "causa_detalle";
break;
default:
}
console.log(comboDetalle);
var step = 2;
var afilters = new Array();
var filterByName = new sap.ui.model.Filter("IKatalogart", sap.ui.model.FilterOperator.EQ, catalogo);
afilters.push(filterByName);
var filterByName = new sap.ui.model.Filter("IStep", sap.ui.model.FilterOperator.EQ, step);
afilters.push(filterByName);
var filterByName = new sap.ui.model.Filter("ICodegruppe", sap.ui.model.FilterOperator.EQ, codGrupo);
afilters.push(filterByName);
var oListBox = this.byId(comboDetalle);
var sServiceUrl = "/sap/opu/odata/sap/ZPMGW_ORDENPMRFC_SRV_02/";
var oConfig = {
metadataUrlParams: {},
json: true,
defaultBindingMode: "OneWay",
defaultCountMode: "Inline",
useBatch: true // defaultOperationMode: "Auto"
};
var oModel = new sap.ui.model.odata.v2.ODataModel(sServiceUrl, oConfig);
oModel.read("/CatalogosComboDetalleSet", {
filters: afilters,
success: function(oData, response) {
var oItem = new sap.ui.core.ListItem({
key: "{Codegruppe}",
text: "{Kurztext}"
});
var oJSModel = new sap.ui.model.json.JSONModel(oData);
console.log(oJSModel);
oListBox.setModel(oJSModel, "myModel");
console.log(oListBox.getModel());
oListBox.bindAggregation("items", {
path: "{/oData>results}",
template: oItem
});
},
error: function(oError) {}
});
在controller.js我有这个:
id
响应没问题,我有数据,但模板不起作用,我不知道我做错了什么,如果有人知道,我会非常感激。
答案 0 :(得分:1)
以下答案假设您只有一个具有两个不同实体集的oData服务。
在这种情况下,您希望在每个sap.m.Select控件中绑定不同的实体集。
我还假设两个实体集之间存在某种关系,可以使用网关服务中的导航属性来实现。
https://github.com/fabiopagoti/so-q48965163
最重要的部分:
查看
<f:SimpleForm layout="ResponsiveGridLayout" title="StackOverflow - Question 48965163" >
<f:content>
<Label text="Category"/>
<Select items="{/Categories}" change="onChangeCategory">
<items>
<core:Item text="{Name}" key="{Id}"></core:Item>
</items>
</Select>
<Label text="SubCategory"/>
<Select id="subcategory-select" items="{ToSubCategories}">
<items>
<core:Item text="{Name}" key="{Id}"></core:Item>
</items>
</Select>
</f:content>
</f:SimpleForm>
控制器
onInit: function(){
this._subcategorySelect = this.byId("subcategory-select");
},
onChangeCategory: function(oEvent){
var oSelectedItem = oEvent.getParameters().selectedItem;
var oContext = oSelectedItem.getBindingContext();
// var oCategory = oContext.getObject();
this._subcategorySelect.bindElement(oContext.getPath());
}
如果你真的有两种不同的服务,你的应用程序中需要两个OData模型。
您可以强制第二个sap.m.Select控件使用其上的setModel函数调用来使用其他服务。
然后,你必须使用{&#34; item&#34;中的bindAggregation方法在第二个Select中调整绑定。属性。