Простой цикл for с JsRender

Я использую JsRender для рендеринга шаблона на стороне клиента. Однако я не могу использовать тег цикла for для повторения html-части блока, потому что он, похоже, принимает только массивы или объекты. Вместо этого мой JSON возвращает переменную, которая является числом (сколько раз я должен повторить блок). Как я могу повторить html N раз, используя JsRender?


person Stefano    schedule 24.10.2012    source источник
comment
Вместо того, чтобы ставить -1 и уходить, пожалуйста, прокомментируйте, чтобы, если мой вопрос не ясен, я мог его отредактировать.   -  person Stefano    schedule 24.10.2012
comment
Вы пробовали весь блок html в массиве?   -  person Franz Noel    schedule 24.10.2012
comment
что вы подразумеваете под целым блоком в массиве? Блок представляет собой простую html-часть, которую я должен повторить N раз. С PHP это простой цикл for на основе диапазона, однако я не нахожу способа сделать это с JsRender.   -  person Stefano    schedule 24.10.2012
comment
если у вас есть блок с кодом <div>Something that I want to write</div>. Затем вы можете поместить всю эту длинную строку в массив. Один блок html кода эквивалентен 1 массиву. Затем повторите массив.   -  person Franz Noel    schedule 24.10.2012
comment
это не сработает, потому что я не получаю из ответа блок HTML, а только число, указывающее, сколько раз его нужно повторить   -  person Stefano    schedule 24.10.2012
comment
Я думаю, что лучше всего здесь не использовать jsrender для такого рода задач, так как вы не можете поставить количество повторений. Вместо этого используйте javascript и jquery.   -  person Franz Noel    schedule 24.10.2012


Ответы (2)


Я не уверен, что JsRender предоставляет эту функциональность из коробки. Вы можете написать свой собственный тег, как здесь: Пример сценария: Создание пользовательских помощников для перебора полей

$.views.helpers({
    getFields: function( count ) {
        var fieldsArray = [];
        for (var i=0; i < count; i++) {
            fieldsArray.push({});
        }

        return fieldsArray;
    }
});

Демонстрация: http://jsfiddle.net/6UeZC/

person webdeveloper    schedule 24.10.2012

Я расширил ответ @webdeveloper, так как нет необходимости в дополнительном цикле, потому что массивы javascript работают таким образом, что вам нужно только определить последний элемент

$.views.helpers({
    repeatLoop: function( count ) {
        if (!count) return [];
        var repeat = [];
        repeat[count-1] = {};
        return repeat;
    }
});

А затем использовать как

@{{for ~repeatLoop(10)}}
    {{:#index+1}}
@{{/for}}
person user1612250    schedule 27.02.2016