2016-08-12 2 views
-1

У меня есть функция, которую я реализовал в 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); 
//... 
} 
+0

* "но, что я понял из декларации в ES6 - это должно работать!?" * Да. 'var',' let', 'const' будут работать. JavaScript имеет лексический охват, который не изменился с ES6. –

+0

Хорошо, спасибо. Но в чем тут проблема? – Nils

+0

Не знаю. Хорошо работает в моей слегка адаптированной версии: https://jsfiddle.net/aapud0ub/. Возможно, есть проблема с кодом, который вы не опубликовали. –

ответ

0

Оказалось, что сам код был чистым и не вызывал ошибки. Это была некоторая ошибка в переводе кода ES6 Babel кода, который был решен после повторной установки модулей через npm.

Смежные вопросы