2015-04-10 3 views
0

Я генерирую дерево (вложенный список UL) с помощью javascript, используя функцию самозапуска. Я могу добавить, что он находится в плагине jQuery, если это вообще имеет отношение к проблеме (возможно, это может быть?).функция самозапуска внутри jQuery plugin

Переменная Г.Д. содержит JSON/массив понюхал из filestructure, так что в основном папки и изображения Имен, и еще некоторые данные (например, само-explainatory атрибут isFolder и т.д.)

 for (i = 0; i < gd.length; ++i) { 

прерывается самообзыв.

var drawTree = function(self,parent){ 

     var gd = self.data('galleryData'); 

     self.data('sidebar', self.data('sidebar')+'<ul>'); 

     for (i = 0; i < gd.length; ++i) { 

      console.log('looping '+i+': '+gd[i]['name']+', isFolder: '+gd[i]['isFolder']+', parent: '+gd[i]['parent']); 

      if ((gd[i]['isFolder'] == true) && (gd[i]['parent'] == parent)) { 
       console.error(gd[i]['name']); 
       self.data('sidebar', self.data('sidebar')+'<li data-folder="'+gd[i]['fileId']+'" class="folderLink">'); 
       self.data('sidebar', self.data('sidebar')+gd[i]['name']); 

       self.data('drawTree')(self,gd[i]['fileId']); // <-- The line causing trouble 

       self.data('sidebar', self.data('sidebar')+'</li>'); 
      } 
     } 

     self.data('sidebar', self.data('sidebar')+'</ul>'); 

    }; 
    this.data('drawTree',drawTree); 

Моя проблема заключается в том, что если я уйду из «проблемной» линии

self.data('drawTree')(self,gd[i]['fileId']); 

который является один делает самозапуск вызов (который позволяет мне также список вложенных папок), то я получаю аккуратный список всех папок уровня 0 (те, у которых нет родительского или родительского атрибута, установленного в пустую строку). Но тогда, конечно, я не получу ни одной из вложенных папок.

Root 
    actions 
    appz 
    categoriez 
    david 
    devices 
    mimetypes 
    places 
    space 
    status 

Если я включать самозапуска вызов, я получаю все вложенные уровни, но только для самого первого из папки на «уровне 0», а если основной цикл (эта строка из кода выше)

Root 
    actions 
     actionsSub1 
      actionSub2 
       actionSub3 
        actionSub4 

ответ

1

У вас есть глобальная переменная. Не рекомендуется использовать var.

for (i = 0; i < gd.length; ++i) { <-- i is global 

теперь другой вызов функции не изменится, когда вы размещаете вар перед i.

for (var i = 0; i < gd.length; ++i) { 
+0

Так просто, но так важно =) Большое спасибо. –

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