Привет, ребят.
Есть вот такой код, который должен подгружать нужные модули в зависимости от переданных данных в массив.
Но в момент callback функции, когда я перебираю эти элементы видимо теряется контекст и ничего не отображается, и я никак не могу понять как мне все это организовать.
Плюс мне нужно передать в callback функцию элемент при переборе значения, он не знаю как его туда передать..
Подскажите. кто сможет..
const app = (function() {
let i = 9;
const DATA = {
'utils': {
scriptURL: './modules/utils/utils.js',
styleURL: './modules/utils/utils.css'
},
'modal': {
scriptURL: './modules/modal/modal.js',
styleURL: './modules/modal/modal.css'
},
'menu': {
scriptURL: './modules/menu/menu.js',
styleURL: './modules/menu/menu.css'
},
'panel': {
scriptURL: './modules/panel/panel.js',
styleURL: './modules/panel/panel.css'
},
'table': {
scriptURL: './modules/table/table.js',
styleURL: './modules/table/table.css'
}
};
let loadScript = (url, callbackScript) => {
let script = document.createElement('script');
script.src = url;
document.getElementsByTagName('body')[0].append(script);
script.onload = function() {
callbackScript(elem); // Как в эту функцию передать elem? elem находится снизу при обходе массива
};
};
let loadStyles = (url) => {
let link = document.createElement('link');
link.setAttribute('type', 'text/css');
link.setAttribute('rel', 'stylesheet');
link.setAttribute('href', url);
document.getElementsByTagName('head')[0].childNodes[i].insertAdjacentElement('afterend', link);
i++;
};
let callback = function(elem) {
let loadingModul = {
'modal': function() {
modal.init();
},
'menu': function() {
menu.init();
},
'panel': function() {
panel.init();
},
'table': function() {
table.init();
},
'super-table': function() {
superTable.init();
}
};
return loadingModul[elem];
};
const App = function() {};
App.prototype.initModule = function(array) {
array.forEach(elem => {
loadStyles.call(DATA, DATA[elem].styleURL); // Вот здесь передаю callback
loadScript.call(DATA, DATA[elem].scriptURL, callback);
});
};
return new App();
}());
app.initModule(['utils', 'modal', 'menu', 'panel', 'table']);