2011-05-12 5 views
12

J'utilise des modèles jquery pour générer une structure arborescente afin d'afficher une arborescence de sections et d'éléments.Modèles JQuery - trop de récursion

La structure des données se présente comme suit, où chaque section comporte des éléments et des sections et chaque élément peut avoir plusieurs sections:

section 
    items 
     item 
      sections 
     item 
      sections 
    sections 
     section 
      sections 
      items 

    ...and so on 

Mes modèles, puis appelez récursive les uns des autres:

<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 Je trouve cependant avec environ 4 niveaux dans la structure que je reçois une erreur "too much recursion "dans ma console

Est-ce juste une limitation du jQuery Templa? te moteur?

Edit:

J'ai résolu en supprimant le {{each}} et le remplacer par un appel {{tmpl}}. Le {{each}} n'était pas nécessaire. J'ai également enveloppé chaque {{tmpl}} appel dans un {{if}} pour assurer la collection existe.

+1

Peut-être que c'est un avertissement que vous êtes sur le point d'obtenir une erreur de débordement de pile. –

Répondre

3

Javascript a une limite de récursivité d'environ 1000 niveaux; Avec la structure que vous utilisez, vous ne devriez probablement pas toucher ça.

« Mes modèles, puis appelez récursive les uns des autres »

Le balisage me fait mal à la tête, donc je vais avoir quelques difficultés à lire le code (mon problème, pas le vôtre), mais chaque fois que je l'ai J'atteins la limite de la pile sur la récursivité pour n'importe quoi, soit parce que j'insiste intentionnellement sur quelque chose avec une récursion profonde, soit parce que j'ai une référence circulaire quelque part pour que ma récursivité ne se termine jamais. Donc, en général: assurez-vous qu'il existe un moyen pour que votre fonction se termine, au lieu de créer de nouvelles instances de lui-même pour toujours.

Questions connexes