SAPUI5 无法访问数组并将其提供给 JSONModel
SAPUI5 Can't access a array and give it to a JSONModel
我在访问数组时遇到问题,我将一些数据从 omodel 读取。该数组称为 aData,其中包含 table 的行数据。这工作正常,所有数据都在那里。
所有代码都是在打开值帮助对话框后完成的,在 his/this table 我想放入数据
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读取后的。这里我有一个数组,其中包含 table 的列数据。
oModel2 包含我在 aColumnData 中定义的列数据
上面的行在 aData 中。这就是问题所在。它 returns(数组)没有数据或仅显示对象。您有更好地处理这个问题的技巧或解决这个问题的方法吗?
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);
}
});
我在访问数组时遇到问题,我将一些数据从 omodel 读取。该数组称为 aData,其中包含 table 的行数据。这工作正常,所有数据都在那里。
所有代码都是在打开值帮助对话框后完成的,在 his/this table 我想放入数据
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读取后的。这里我有一个数组,其中包含 table 的列数据。 oModel2 包含我在 aColumnData 中定义的列数据 上面的行在 aData 中。这就是问题所在。它 returns(数组)没有数据或仅显示对象。您有更好地处理这个问题的技巧或解决这个问题的方法吗?
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);
}
});