У меня есть функция, которую я реализовал в ES6. Все работает нормально, за исключением доступа к переменной (области действия) внутри цикла.ES6/BABEL let scope
Я определяю let u прямо в начале функции. В цикле for некоторые дочерние элементы должны быть добавлены к этой переменной u. Когда я вставляю u в DOM после того, как цикл закончен, дочерние элементы не отображаются, но в пределах цикла u управляется (как говорит консоль).
Я думаю, что я не могу манипулировать функцией, ограниченной областью u внутри цикла/if block ... но, что я понял из let объявление в ES6 - он должен работать !? У кого-нибудь есть идея? Благодаря!
фона: это ES6 код transcompiled с Бабелем в ES5, а затем компилируется в приложение Apache Cordova работает на Windows 10/UWP, это может помочь
export function buildSubNavigation(parent) {
let u = $('<ul>')
.addClass('subNavbarList');
for (let p in window.pages) {
if(window.pages[p]['parent'] == parent){
let i = $('<li>')
.addClass('subNavbarItem')
.attr('id','subNavbarItem' + window.pages[p]['id'])
.click(function(){
// bind functions
//...
});
// console prints proper list items
console.log(i);
// console prints u including list childs
u.append(i);
}
}
// inject into page
// no list childs are injected to DOM, only UL element
$('#subNavbar').html(u);
//...
}
* "но, что я понял из декларации в ES6 - это должно работать!?" * Да. 'var',' let', 'const' будут работать. JavaScript имеет лексический охват, который не изменился с ES6. –
Хорошо, спасибо. Но в чем тут проблема? – Nils
Не знаю. Хорошо работает в моей слегка адаптированной версии: https://jsfiddle.net/aapud0ub/. Возможно, есть проблема с кодом, который вы не опубликовали. –