내가이 문제를 이해했다면 원하는 결과를 얻을 수 있습니다. (답을 수정/삭제할 수 없으면 알려주십시오). 샘플 데이터를 붙여 넣을 수 있으면 가장 좋습니다.
첫째 : 데이터 :
var selProps = [
"Prop1", "Prop2", "Prop3" // Selected Properties stored in an array
];
var data = [ // Data, data, data (with all properties)
{
phone:"Moto G",
"Prop1": "Prop1-1",
"Prop2" :"Prop1-2",
"Prop3": "Prop1-3",
"Prop4" :"Prop1-4"
},
{
phone:"Moto X",
"Prop1": "Prop2-1",
"Prop2" :"Prop2-2",
"Prop3": "Prop2-3",
"Prop4" :"Prop2-4"
},
{
phone:"iPhone",
"Prop1": "Prop3-1",
"Prop2" :"Prop3-2",
"Prop3": "Prop3-3",
"Prop4" :"Prop3-4"
},
{
phone:"G Pixel 2",
"Prop1": "Prop4-1",
"Prop2" :"Prop4-2",
"Prop3": "Prop4-3",
"Prop4" :"Prop4-4"
}
];
출력 :
코드 : 보기 :
var oTable = new sap.m.Table();
var oColTemplate = new sap.m.Column({
header: new sap.m.Text({
text: "{phone}"
})
});
oTable.bindAggregation("columns", "/data", oColTemplate);
oTable.bindItems("/selProps", function(sId, oContext) {
var aCells = [];
var oModel = oContext.getModel();
var aCols = oModel.getProperty("/data"); // Fetch No of columns. Create that many Texts.
for (var index = 0 ;index < aCols.length; index++) {
// data will be stored in : /data/index/selected Property(present in oContext)
var oText = new sap.m.Text({
text : "{/data/" + index + "/" + oContext.getProperty() +"}"
});
aCells.push(oText);
}
return new sap.m.ColumnListItem({
cells: aCells
});
}.bind(oTable));
return new sap.m.Page({
title: "Title",
content: [
oTable
]
});
컨트롤러 :
onInit: function() {
var selProps = [
"Prop1", "Prop2", "Prop3" // Selected Properties stored in an array
];
var data = [ // Data, data, data (with all properties)
{
phone:"Moto G",
"Prop1": "Prop1-1",
"Prop2" :"Prop1-2",
"Prop3": "Prop1-3",
"Prop4" :"Prop1-4"
},
{
phone:"Moto X",
"Prop1": "Prop2-1",
"Prop2" :"Prop2-2",
"Prop3": "Prop2-3",
"Prop4" :"Prop2-4"
},
{
phone:"iPhone",
"Prop1": "Prop3-1",
"Prop2" :"Prop3-2",
"Prop3": "Prop3-3",
"Prop4" :"Prop3-4"
},
{
phone:"G Pixel 2",
"Prop1": "Prop4-1",
"Prop2" :"Prop4-2",
"Prop3": "Prop4-3",
"Prop4" :"Prop4-4"
}
];
var oModel = new sap.ui.model.json.JSONModel({data: data, selProps: selProps});
this.getView().setModel(oModel);
},
공장 기능에 대한 자세한 내용 : Factory Functions
업데이트 : 빈 행과 열을 표시합니다.
1 단계 :
지금, 위의 예에서 우리는 데이터 존재에 직접 열을의 결합 : 빈 열을 추가합니다. 처음에 추가 열을 추가해야하므로 변경됩니다.
그래서 여기에 데이터를 읽을 위치를 붙여 넣으십시오 (예제에서는 수동 JSON 데이터 설정).
새로운 INIT 기능 :
onInit: function() {
var selProps = [
...// same as above: To reduce post length
];
var data = [ ...// same as above: To reduce post length];
var oModel = new sap.ui.model.json.JSONModel({data: data, selProps: selProps});
this.getView().setModel(oModel);
this.fnBindColumns(); // Call function to create columns
},
fnBindColumns : function() {
var oTable = this.byId('idTable');
var aData = this.getView().getModel().getProperty("/data");
var oPropCol = new sap.m.Column({
header: new sap.m.Text({
text: ""
})
});
oTable.addColumn(oPropCol);
for(var i = 0; i <aData.length ; i++) {
var oCol = new sap.m.Column({
header: new sap.m.Text({
text : "{/data/" + i + "/phone}"
})
});
oTable.addColumn(oCol);
}
}
2 단계 :는 재산 행 추가이 새로운 데이터를 읽을 때마다 수행해야합니다 기억하십시오. 이렇게하면 공장 기능으로 변경됩니다.
var oTable = new sap.m.Table({
id: this.createId("idTable") // Look Id added
});
oTable.bindItems("/selProps", function(sId, oContext) {
var aCells = [];
var oModel = oContext.getModel();
var aCols = oModel.getProperty("/data");
for (var index = 0 ;index < aCols.length + 1; index++) { // length = no of mobile phones + 1 (+1 for extra property row).
if (index == 0) { // add the property Text if first column
var oText = new sap.m.Text({
text : oContext.getProperty()
});
} else {
var oText = new sap.m.Text({
text : "{/data/" + (index-1) + "/" + oContext.getProperty() +"}" // bind the text via absolute path.
});
}
aCells.push(oText);
}
return new sap.m.ColumnListItem({
cells: aCells
});
}.bind(oTable));
새 테이블 :이 도움이
희망 그래서, 우리의 JS 뷰의 컨텐츠를 만들 수 있습니다.
하이 아틀라스, 당신은 당신의 문제를 해결 한? –
나는 아직 시도하지 않았다. 다시 일하러 갈 때 (다음 월요일) – Atlas