jQuery 插件中的自调用函数
self-calling function inside jQuery plugin
我正在使用下面的自调用函数用 javascript 生成一个树(嵌套的 UL 列表)。我可能会补充说它在 jQuery 插件中,如果它与问题完全相关(也许它可能是?)。
变量 gd 包含一个从文件结构中嗅探出来的 json/array,所以它基本上是文件夹和图像的名称,以及一些更多的数据(比如不言自明的 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);
我的问题是,如果我省略 "problem" 行
self.data('drawTree')(self,gd[i]['fileId']);
哪个是进行自我调用的(这使我也可以列出子文件夹)然后我得到所有 "level 0" 文件夹的整洁列表(没有父文件夹或父属性集的文件夹为空字符串)。但是我当然不会得到任何嵌套文件夹。
Root
actions
appz
categoriez
david
devices
mimetypes
places
space
status
如果我确实包含自调用,我会获得所有嵌套级别,但仅限于 "level 0" 处的第一个文件夹,就像主循环一样(上面代码中的这一行)
Root
actions
actionsSub1
actionSub2
actionSub3
actionSub4
你有一个全局变量。不要将 var
视为可选。
for (i = 0; i < gd.length; ++i) { <-- i is global
现在,当您将 var 放在 i
前面时,其他函数调用不会更改它。
for (var i = 0; i < gd.length; ++i) {
我正在使用下面的自调用函数用 javascript 生成一个树(嵌套的 UL 列表)。我可能会补充说它在 jQuery 插件中,如果它与问题完全相关(也许它可能是?)。
变量 gd 包含一个从文件结构中嗅探出来的 json/array,所以它基本上是文件夹和图像的名称,以及一些更多的数据(比如不言自明的 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);
我的问题是,如果我省略 "problem" 行
self.data('drawTree')(self,gd[i]['fileId']);
哪个是进行自我调用的(这使我也可以列出子文件夹)然后我得到所有 "level 0" 文件夹的整洁列表(没有父文件夹或父属性集的文件夹为空字符串)。但是我当然不会得到任何嵌套文件夹。
Root
actions
appz
categoriez
david
devices
mimetypes
places
space
status
如果我确实包含自调用,我会获得所有嵌套级别,但仅限于 "level 0" 处的第一个文件夹,就像主循环一样(上面代码中的这一行)
Root
actions
actionsSub1
actionSub2
actionSub3
actionSub4
你有一个全局变量。不要将 var
视为可选。
for (i = 0; i < gd.length; ++i) { <-- i is global
现在,当您将 var 放在 i
前面时,其他函数调用不会更改它。
for (var i = 0; i < gd.length; ++i) {