javascript - example - Plantillas JQuery: demasiada recursión
template ajax jquery (1)
Javascript tiene un límite de recursión de aproximadamente 1000 niveles; sin embargo, con la estructura que estás usando, probablemente no deberías estar golpeando eso.
"Mis plantillas se llaman entre sí recursivamente"
El marcado hace que me duela la cabeza, así que estoy teniendo dificultades para leer el código (mi problema, no el tuyo), pero cada vez que alcanzo el límite de la pila en la recursión de cualquier cosa, o bien ha sido porque estoy poniendo énfasis intencionalmente algo con recursión profunda, o porque tengo una referencia circular en alguna parte para que mi recursión nunca termine.
Por lo tanto, en general: asegúrese de que haya una forma de completar su función, en lugar de crear nuevas instancias de sí mismo para siempre.
Estoy usando plantillas de jquery para generar una estructura de árbol para mostrar una vista de árbol de secciones y elementos.
La estructura de los datos se ve así, donde cada sección tiene elementos y secciones y cada elemento puede tener más secciones:
section
items
item
sections
item
sections
sections
section
sections
items
...and so on
Mis plantillas se llaman recíprocamente una a la otra:
<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);
Sin embargo, encuentro que con alrededor de 4 niveles en la estructura recibo un error de " "too much recursion
" en mi consola.
¿Es esto solo una limitación del motor de plantilla jQuery?
Editar:
Resolví esto quitando el {{each}}
y reemplazándolo con una llamada {{tmpl}}
. El {{each}}
no fue necesario. También he completado cada llamada {{tmpl}}
en un {{if}}
para asegurar que la colección existe.