2011-05-12 12 views
12

Estoy usando plantillas jquery para generar una estructura en árbol para mostrar una vista en árbol de secciones y elementos.Plantillas JQuery: demasiada recursión

La estructura de los datos se ve como este, donde cada sección tiene artículos 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 a continuación, llamar de forma recursiva entre sí:

<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); 

I estoy encontrando sin embargo 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 jQuery Templa? te motor?

Editar:

he resuelto mediante la eliminación de la {{each}} y su sustitución por 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.

+1

Quizás sea una advertencia de que está a punto de recibir un error de desbordamiento de pila. –

Respuesta

3

Javascript tiene un límite de recursividad de aproximadamente 1000 niveles; sin embargo, con la estructura que estás usando, probablemente no deberías estar golpeando eso.

"Mis plantillas a continuación, llamar de forma recursiva entre sí"

El marcado hace que me duela la cabeza, así que estoy teniendo dificultades para leer el código (mi problema, no el suyo), pero cada vez que he Alcanzar el límite de la pila en la recursividad para cualquier cosa, ya sea porque estoy enfatizando 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 manera de completar su función, en lugar de crear nuevas instancias de sí mismo para siempre.