JQuery模板 - 太多的递归

cwe*_*ton 12 javascript jquery jquery-plugins jquery-templates

我使用jquery模板生成树结构,以显示部分和项目的树视图.

数据结构如下所示,每个部分都有项目和部分,每个项目可以包含更多部分:

section
    items
        item
            sections
        item
            sections
    sections
        section
            sections
            items

    ...and so on
Run Code Online (Sandbox Code Playgroud)

然后我的模板以递归方式相互调用:

<script id="my-item-tmpl" type="text/x-jquery-tmpl">
    <li>
        <span>${text}</span>
        <ul>
        {{each sections}}
             {{tmpl($value) "sectionTmpl"}}
        {{/each}}
        </ul>
    </li>
</script>

<script id="my-section-tmpl" type="text/x-jquery-tmpl">
    <li>
        <span>${text}</span>
        <ul>
        {{each items}}
             {{tmpl($value) "itemTmpl"}}
        {{/each}}

        {{each sections}}
             {{tmpl($value) "sectionTmpl"}}
        {{/each}}
        </ul>
    </li>
</script>




$("#my-item-tmpl").template('itemTmpl');
$("#my-section-tmpl").template('sectionTmpl');


$.tmpl('sectionTmpl', { section }).appendTo(this);
Run Code Online (Sandbox Code Playgroud)

然而,我发现在结构中有大约4个级别,我"too much recursion在控制台中收到"错误".

这仅仅是jQuery Template引擎的限制吗?

编辑:

我通过删除{{each}}并用{{tmpl}}呼叫替换它来解决这个问题.该{{each}}是没有必要的.我还将每个{{tmpl}}调用包装在一起{{if}}以确保集合存在.

Joe*_*Joe 3

Javascript 的递归限制约为 1000 级;不过,根据您正在使用的结构,您可能不应该遇到这种情况。

“然后我的模板递归地互相调用”

标记让我头疼,所以我在阅读代码时遇到一些困难(我的问题,不是你的问题),但是每当我达到任何递归的堆栈限制时,要么是因为我故意强调具有深度递归的东西,或者因为我在某处有循环引用,所以我的递归永远不会终止。

因此,一般来说:确保有一种方法可以完成您的函数,而不是永远创建其自身的新实例。