【发布时间】:2020-05-03 08:27:58
【问题描述】:
我在访问数组时遇到问题,我将一些来自 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 包含我在 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");
【问题讨论】:
-
第二段代码直接跟在第一段后面吗?如果是这样,当您尝试使用数组填充模型时,成功方法可能尚未启动。将您的表绑定到 oTestModel 不是一个选项吗?
-
是的,直接跟随。你确定吗。它完成了,然后进入第二个部分。我确信它成功了。将表绑定到 oTestModel 的问题是我无法绑定它,因为它是一个 sap.ui.table。我试过了,但对我有用的解决方案就是我所拥有的。我不知道,也许我也做错了什么
-
aData 数组是空的还是aData 没有定义?因为看起来您在成功处理程序中声明它并尝试在外部访问它。您能否尝试在“oTestModel.read(...)”之前声明变量“aData”。如果这没有帮助,那么 Samleijenhorst 可能是正确的,因为“读取”是异步的。这意味着,成功处理程序将在接收到数据时运行。这可能是在您的第二次剪辑已经运行之后。
-
现在我在外面定义了它。运行后 aData 为空。你能解释一下为什么读取后的代码比读取本身先被调用。我不明白这一点。我是 sapui5 / javascript 的新手
-
一旦从网络接收到数据,成功处理程序就会运行。这是异步的,这意味着代码执行不会停止并等待来自后端的数据,它会一直运行直到收到数据。此时,成功处理程序将运行。您无法确切知道成功处理程序何时运行,因为它取决于后端响应的速度。我会添加一个答案供您尝试。
标签: javascript data-binding sapui5 sap-fiori