Javascript SAPUI5罐';t访问数组并将其交给JSONModel
我在访问数组时遇到问题,在数组中我从omodel读取了一些数据。该数组称为aData,它包含表的行数据。这很好,所有数据都在那里 所有代码都是在打开“值帮助”对话框后完成的,我想将数据放在他/这个表中Javascript SAPUI5罐';t访问数组并将其交给JSONModel,javascript,data-binding,sapui5,sap-fiori,Javascript,Data Binding,Sapui5,Sap Fiori,我在访问数组时遇到问题,在数组中我从omodel读取了一些数据。该数组称为aData,它包含表的行数据。这很好,所有数据都在那里 所有代码都是在打开“值帮助”对话框后完成的,我想将数据放在他/这个表中 var oTestModel = this.getModel(); oTestModel.read("/shrhelpSet", { filters: [oFilterObject, oFilterField, oFilterLang],
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);
}
});
你的观点没有问题
var-oTable=new sap.ui.table.table({
行:“{/rows}”,
标题:新sap.m.title({
文本:“测试”
})
});
oTable.bindColumns(“/columns”,函数(索引,上下文){
var sColumnId=context.getObject().columnId;
返回新的sap.ui.table.Column({
标签:sColumnId,
模板:sColumnId
});
});
var model=new sap.ui.model.json.JSONModel({
栏目:[{
columnId:“键”
}, {
columnId:“值”
}],
行:[
{键:“K1”,值:“V1”},
{键:“K2”,值:“V2”},
]
});
setModel(model);
可旋转。放置在(“内容”)代码>
您的视图没有问题
var-oTable=new sap.ui.table.table({
行:“{/rows}”,
标题:新sap.m.title({
文本:“测试”
})
});
oTable.bindColumns(“/columns”,函数(索引,上下文){
var sColumnId=context.getObject().columnId;
返回新的sap.ui.table.Column({
标签:sColumnId,
模板:sColumnId
});
});
var model=new sap.ui.model.json.JSONModel({
栏目:[{
columnId:“键”
}, {
columnId:“值”
}],
行:[
{键:“K1”,值:“V1”},
{键:“K2”,值:“V2”},
]
});
setModel(model);
可旋转。放置在(“内容”)代码>
我认为问题可能是您正在推字符串,而不是数组中的对象:
aData.push("{Key: '" + oDatas2.results[i].key + "', Value: '" + oDatas2.results[i].value + "'}");
您的对象应该是这样的:
{
Key: oDatas2.results[i].key,
Value: oDatas2.results[i].value
}
我认为问题可能是您正在推字符串,而不是数组中的对象:
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);
}
});
尝试将需要访问接收数据的代码移动到成功处理程序中,如下所示。另外,我认为另一个答案是正确的,即您需要创建对象而不是字符串
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);
}
});
第二段代码是否直接跟随第一段代码?如果是这样,当您试图使用数组填充模型时,成功方法可能尚未启动。将表绑定到oTestModel不是一个选项吗?是的,直接执行以下操作。你确定。它完成了,然后进入第二部分。我相信它会成功的。将表绑定到oTestModel的问题是我无法绑定它,因为它是一个sap.ui.table。我试过了,但对我有效的解决方案是我拥有的。我不知道,可能是我做错了什么,因为aData数组是空的还是没有定义aData?因为它看起来像是您在成功处理程序中声明它,然后尝试在外部访问它。您能否尝试在“oTestModel.read(…)”之前声明变量“aData”。如果这没有帮助,那么Samleijenhorst可能是正确的,因为“读取”是异步的。这意味着,成功处理程序将在收到数据时运行。这可能是在你的第二次截击已经开始后。现在我在外面定义它。运行后数据为空。你能解释一下为什么读取后的代码比读取本身先被调用吗。我不明白。我不熟悉sapui5/Javascript。一旦从网络接收到数据,成功处理程序就会运行。这是异步的,这意味着代码执行不会停止并等待来自后端的数据,它将保持运行,直到收到数据。此时,成功处理程序将运行。您无法确切知道sucess处理程序何时运行,因为它取决于后端响应的速度。我将添加一个答案供您尝试。第二段代码是否直接跟随第一段代码?如果是这样,当您试图使用数组填充模型时,成功方法可能尚未启动。将表绑定到oTestModel不是一个选项吗?是的,直接执行以下操作。你确定。它完成了,然后进入第二部分。我相信它会成功的。将表绑定到oTestModel的问题是我无法绑定它,因为它是一个sap.ui.table。我试过了,但对我有效的解决方案是我拥有的。我不知道,可能是我做错了什么,因为aData数组是空的还是没有定义aData?因为它看起来像是您在成功处理程序中声明它,然后尝试在外部访问它。您能否尝试在“oTestModel.read(…)”之前声明变量“aData”。如果这没有帮助,那么Samleijenhorst可能是正确的,因为“读取”是异步的。这意味着,成功处理程序将在收到数据时运行。这可能是在你的第二次截击已经开始后。现在我在外面定义它。运行后数据为空。你能解释一下为什么读取后的代码比读取本身先被调用吗。我不明白。我不熟悉sapui5/Javascript。一旦从网络接收到数据,成功处理程序就会运行。这是异步的,这意味着代码执行不会停止并等待来自后端的数据,它将保持运行,直到收到数据。此时,成功处理程序将运行。您无法确切知道sucess处理程序何时运行,因为它取决于后端响应的速度。我将添加一个答案供您试用。不,我没有更改它,我只是复制了密钥和值以将其保存在阵列中。不,我没有更改它,我只是复制了密钥和值以将其保存在阵列中。非常感谢。这就是解决办法。我必须更多地了解异步、模型、ui5等的过程。非常感谢。这就是解决办法。我必须对t有更多的了解