Подтвердить что ты не робот

Шаблоны JQuery - слишком много рекурсии

Я использую шаблоны jquery для создания древовидной структуры для отображения дерева разделов и элементов.

Структура данных выглядит так: каждый раздел имеет элементы и разделы, и каждый элемент может иметь больше разделов:

section
    items
        item
            sections
        item
            sections
    sections
        section
            sections
            items

    ...and so on

Мои шаблоны затем рекурсивно называют друг друга:

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

Я нахожу, однако, что около 4 уровней в структуре я получаю ошибку "too much recursion "в моей консоли.

Это просто ограничение механизма шаблона jQuery?

Edit:

Я решил это, удалив {{each}} и заменив его на вызов {{tmpl}}. {{each}} не нужен. Я также завернул каждый вызов {{tmpl}} в {{if}}, чтобы убедиться, что коллекция существует.

4b9b3361

Ответ 1

Javascript имеет предел рекурсии около 1000 уровней; со структурой, которую вы используете, вероятно, не стоит этого бить.

"Мои шаблоны затем рекурсивно называют друг друга"

Разметка заставляет мою голову болеть, поэтому я испытываю трудности с чтением кода (моя проблема, а не ваша), но в любое время, когда я ударил ограничение стека на рекурсию для чего-либо, это было либо потому, m намеренно подчеркивая что-то с глубокой рекурсией или потому, что у меня есть круговая ссылка где-то, чтобы моя рекурсия никогда не заканчивалась.

Итак, в общем: убедитесь, что путь к вашей функции завершен, а не создавать новые экземпляры самого себя навсегда.