繁体   English   中英

jQuery插件内部的自调用函数

[英]self-calling function inside jQuery plugin

我正在使用下面的自调用功能使用javascript生成树(嵌套的UL列表)。 我可能会补充说,它完全在问题中相关(也许是吗?),它在jQuery插件中。

变量gd包含从文件结构中嗅出的json /数组,因此它基本上是文件夹和图像的名称,以及更多数据(例如,不言自明的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

您有一个全局变量。 不要将var作为可选项。

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

现在,将var放在i前面时,另一个函数调用不会更改它。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM