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}}以确保集合存在.
Javascript 的递归限制约为 1000 级;不过,根据您正在使用的结构,您可能不应该遇到这种情况。
“然后我的模板递归地互相调用”
标记让我头疼,所以我在阅读代码时遇到一些困难(我的问题,不是你的问题),但是每当我达到任何递归的堆栈限制时,要么是因为我故意强调具有深度递归的东西,或者因为我在某处有循环引用,所以我的递归永远不会终止。
因此,一般来说:确保有一种方法可以完成您的函数,而不是永远创建其自身的新实例。
| 归档时间: |
|
| 查看次数: |
974 次 |
| 最近记录: |