我想创建一个递归模板,使其能够处理所有子项-无论深度如何。
可以说我的背景看起来像
{
div:true
,id:'root'
,children:[
{div:true,id='root-1'}
,{div:true,id='root-2', children:[
{div:true,id='root-2.1'} //etc,ect...
]}
}
}
我想说:
var div_tpl='{#div}'+
'<div{#id} id="{id}"{/id}{#class} class="{class}"{/class}>'+
'{#children}{>div_tpl/}{/children}'+ //self-ref here
'</div>{/div}';
dust.compile(div_tpl,'div_tpl');
但是,当我输入数据时,这当然会挂起。我还尝试了div_tpl1和div_tpl2,它们彼此引用。因此,现在我只需要确认“不可能”即可。
最佳答案
好消息是,这是可能的。看来您遇到的麻烦与“灰尘”查找方法有关。当前,{#children}
将在当前上下文中查找,然后在所有父上下文中查找(如果在当前上下文中找不到任何内容)。
因此,在您的示例中,Dust将开始渲染第一个div(id="root"
),然后找到它的children
,然后开始渲染它们。它将呈现第二个div(id="root-1"
),然后查找children
。它不会在当前上下文中找到children
,因此它将在父上下文中查找children
。然后,灰尘将再次渲染第二个div,再次搜索子级,然后无限循环。
您可以通过使用点符号来避免无限循环:
...
{#.children}
{>div_tpl/}
{/.children}
...
有关工作示例,请参见此jsfiddle。
关于javascript - DustJS无限嵌套,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18799261/