Javascript 获取异步函数的值,在SAPUI5中完成
变量datelist应该是一个包含许多项的数组。 在oModel.attachRequestComplete函数中,项目将被逐个推送到列表中 下面示例中的console.logdatelist给出了包含所有必要项的列表10项。 但是,datelist.length属性为0 一个数组如何包含10个元素,但其长度为0 预期成果: 日期列表应包含所有项目 datelist.length应大于0 oModel.loadData将异步请求数据。 在请求完成后,将调用传递给attachRequestCompleted的回调。在数据可用之前,不会在loadData处阻塞执行 当您的console.logdatelist、datelist.length;行运行时,日期列表仍将是空数组。 在浏览器控制台中可以看到阵列中的项目的原因是,在检查请求时,请求已完成。 您可以在浏览器控制台中尝试以下操作:Javascript 获取异步函数的值,在SAPUI5中完成,javascript,sapui5,Javascript,Sapui5,变量datelist应该是一个包含许多项的数组。 在oModel.attachRequestComplete函数中,项目将被逐个推送到列表中 下面示例中的console.logdatelist给出了包含所有必要项的列表10项。 但是,datelist.length属性为0 一个数组如何包含10个元素,但其长度为0 预期成果: 日期列表应包含所有项目 datelist.length应大于0 oModel.loadData将异步请求数据。 在请求完成后,将调用传递给attachRequestComp
var arr = [];
console.log(arr, arr.length); // [], 0
arr.push(1); arr.push(2); arr.push(3);
// console.log(arr, arr.length); // [1,2,3], 3
第一个日志将输出数组,当您检查它时,项目将在那里-它们只是在您访问.length时还不在那里
要解决此问题,可以将日期列表保存在请求完成处理程序中:
var oModel = new sap.ui.model.json.JSONModel();
oModel.attachRequestCompleted(function() {
var oFeiertageBerlin = oModel.getData().BE;
var datelist = [];
for (var prop in oFeiertageBerlin) {
datelist.push(oFeiertageBerlin[prop].datum);
}
console.log(datelist, datelist.length);
// do something with the datelist here
});
var jDatum = new Date();
var jLink = "https://feiertage-api.de/api/?jahr=" + jDatum.getFullYear();
oModel.loadData(jLink);
使用sapui,您可以将数组作为json模型返回,然后可以在视图中绑定到该模型:
function loadHolidays() {
var result = new sap.ui.model.json.JSONModel({datelist: []});
var oModel = new sap.ui.model.json.JSONModel();
oModel.attachRequestCompleted(function() {
var oFeiertageBerlin = oModel.getData().BE;
var datelist = [];
for (var prop in oFeiertageBerlin) {
datelist.push(oFeiertageBerlin[prop].datum);
}
result.setData({datelist: datelist});
});
var jDatum = new Date();
var jLink = "https://feiertage-api.de/api/?jahr=" + jDatum.getFullYear();
oModel.loadData(jLink);
return result;
}
var model = loadHolidays();
// attach model to view
// e.g. sap.ui.getCore().setModel(model);
Plunker示例,其中日期显示在一个表中:我想对attachRequestCompleted之外的datelist做点什么,如何实现它?@Roman11222您可以在attachRequestCompleted回调之外声明datelist,但是在您传递给attachRequestCompleted的回调运行之前,它将为空。你需要用它做什么?日期列表包含了柏林的所有假日,我将在Calendar@Roman11222您可以使用单独的JSONModel,然后在生成日期列表后对其调用setData。然后可以将此模型绑定到视图以使用日期列表。我用一个新的例子更新了答案谢谢你的回答。我复制了您的示例,并将模式绑定到sap.ui.getCore->model.oData包含0项的日期列表。有什么问题?
function loadHolidays() {
var result = new sap.ui.model.json.JSONModel({datelist: []});
var oModel = new sap.ui.model.json.JSONModel();
oModel.attachRequestCompleted(function() {
var oFeiertageBerlin = oModel.getData().BE;
var datelist = [];
for (var prop in oFeiertageBerlin) {
datelist.push(oFeiertageBerlin[prop].datum);
}
result.setData({datelist: datelist});
});
var jDatum = new Date();
var jLink = "https://feiertage-api.de/api/?jahr=" + jDatum.getFullYear();
oModel.loadData(jLink);
return result;
}
var model = loadHolidays();
// attach model to view
// e.g. sap.ui.getCore().setModel(model);