我在访问数组时遇到问题,在数组中我从omodel读取了一些数据。该数组称为aData,并且包含表的行数据。一切正常,所有数据都在其中。
所有这些代码都是在打开值帮助对话框之后完成的,我想在他/这个表中放置数据
var oTestModel = this.getModel();
oTestModel.read("/shrhelpSet", {
filters: [oFilterObject, oFilterField, oFilterLang],
success: function(oRetrieveResults){
//console.log(oRetrieveResults);
var oDatas2 = oRetrieveResults;
var test1 = oDatas2.results;
var aData = [];
var index = oDatas2.results.length;
var i;
for (i=0; i<index; i++) {
aData.push("{Key: '" + oDatas2.results[i].key + "', Value: '" + oDatas2.results[i].value + "'}");
}
// aData Array
console.log("aData: " + aData);
},
error: function(oError){
console.log(oError);
}
});
此代码在omodel读取之后。在这里,我有一个表包含列数据的数组。oModel2包含columndata,我在aColumnData中定义并且上面的行在aData中。这就是问题所在。它不返回(数组)任何数据或仅显示对象。您是否准备好小费以更好地处理此问题或解决此问题?
var aColumnData = [{
columnId: "Key"
}, {
columnId: "Value"
}];
var oModel2 = new sap.ui.model.json.JSONModel();
oModel2.setData({
columns: aColumnData,
rows: aData // THIS IS THE RESULT OF MY MODEL, the results are in aData but i cant access it here
});
oTable.setModel(oModel2);
oTable.bindColumns("/columns", function(index, context) {
var sColumnId = context.getObject().columnId;
return new sap.ui.table.Column({
id : sColumnId,
label: sColumnId,
template: sColumnId
});
});
oTable.bindRows("/rows");
您的观点没有问题。
var oTable = new sap.ui.table.Table({
rows: '{/rows}',
title: new sap.m.Title({
text: "Test"
})
});
oTable.bindColumns("/columns", function(index, context) {
var sColumnId = context.getObject().columnId;
return new sap.ui.table.Column({
label: sColumnId,
template: sColumnId
});
});
var model = new sap.ui.model.json.JSONModel({
columns: [{
columnId: "Key"
}, {
columnId: "Value"
}],
rows: [
{ Key: "K1", Value: "V1" },
{ Key: "K2", Value: "V2" },
]
});
oTable.setModel(model);
oTable.placeAt('content');
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta http-equiv='Content-Type' content='text/html;charset=UTF-8'/>
<script src="https://sapui5.hana.ondemand.com/resources/sap-ui-core.js"
id="sap-ui-bootstrap"
data-sap-ui-libs="sap.ui.commons,sap.ui.table,sap.m"
data-sap-ui-xx-bindingSyntax="complex"
data-sap-ui-theme="sap_belize"></script>
</head>
<body id="content" class="sapUiBody sapUiSizeCompact">
</body>
</html>
因此看来您的模型不正确。也许您正在尝试像这样更改模型中的结果。
success: function(oRetrieveResults){
var aData = oRetrieveResults.results.map(function(data) {
return {
Key: '"' + data.key + '"',
Value: '"' + data.value + '"'
};
});
this.setProperty("/results", oData);
},
我认为问题可能是您正在推送字符串而不是数组中的对象:
aData.push("{Key: '" + oDatas2.results[i].key + "', Value: '" + oDatas2.results[i].value + "'}");
您的对象应该是这样的:
{
Key: oDatas2.results[i].key,
Value: oDatas2.results[i].value
}
尝试像这样将需要访问接收到的数据的代码移到成功处理程序中。另外,我认为另一个答案是正确的,您需要创建对象而不是字符串。
this.getModel().read("/shrhelpSet", {
filters: [oFilterObject, oFilterField, oFilterLang],
success: function (oRetrieveResults) {
var aData = oRetrieveResults.results.map(function (oResult) {
return {
Key: oResult.key,
Value: oResult.value
};
});
var aColumnData = [{
columnId: "Key"
}, {
columnId: "Value"
}];
var oModel = new sap.ui.model.json.JSONModel({
columns: aColumnData,
rows: aData
});
oTable.setModel(oModel);
oTable.bindColumns("/columns", function (index, context) {
var sColumnId = context.getObject().columnId;
return new sap.ui.table.Column({
id: sColumnId,
label: sColumnId,
template: sColumnId
});
});
oTable.bindRows("/rows");
}.bind(this),
error: function (oError) {
console.log(oError);
}
});