Как использовать значение переменной объекта window в другом модуле?
В рамках учебного задания по модульности кода и AJAX столкнулся с проблемой:
не могу записать в переменную window.picturesObjects и использовать данные полученные с сервера в одном из модулей.
//backend.js
'use strict'
(function(){
window.backend = {
load: function(onLoad, onError){
var URL = '...';
var xhr = XMLHttpRequest();
xhr.responseType = 'json';
xhr.addEventListener('load', function() {
if(xhr.status === 200) {
onLoad(xhr.response);
} else {
onError(..);
}
});
xhr.open('GET', URL);
xhr.send();
}
}
})();
// main.js
'use strict';
(function(){
window.picturesObjects = []; // "Экспортируемая переменная, которую необходимо использовать в другом модуле
// Получаем список фотографий, загруженных с сервера
var successHandler = function (pictures) {
var addFragment = function (elemArray, renderFunction, parentElem) {
var fragment = document.createDocumentFragment();
for (var i = 0; i < elemArray.length; i++) {
fragment.appendChild(renderFunction(elemArray[i]));
}
parentElem.appendChild(fragment);
};
addFragment(pictures, renderPicture, picturesListELement);
window.picturesObjects = pictures;
console.log(window.picturesObjects); // Корректно показывает нужный массив с данными
};
window.backend.load(successHandler, errorHandler);
console.log(window.picturesObjects); // Здесь и в модуле picture.js показывает пустой массив ((
})();
// picture.js
'use strict';
(function(){
var showBigPicture = function (smallPicture) {
...
}
for (var i=0; i<picturesList.length; i++) {
(function(picture) {
pictureList[i].addEventListener('click', function () {
showBigPicture(picture);
});
})(window.picturesObjects[i]);
}
})();
Решение должно быть без использования директив export/import
Ответы (1 шт):
Автор решения: Ruslan
→ Ссылка
Спасибо, за советы. Все решилось просто добавлением той же функции window.backend.load(successHandler, errorHandler); в нужный модуль и редактировании уже там successHandler.