Как передавать уникальное инкрементное значение каждый раз, когда частичное вызывается из шаблона руля

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

Я хочу иметь уникальный индекс для каждой строки для каждой таблицы. @index не поможет, так как мне нужен уникальный ключ и для других таблиц. Например:

Table 1

Index Name
----------
1     ABC
2     XYZ


Table 2
--------
Index Name
3     ABC
4     XYZ`


{{> table tableData=table1 cardinal=1}}

{{> table tableData=table2 cardinal=1}}
 

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

Handlebars.registerHelper("increment", function (value) {
     return parseInt(value) + 1;
});

Надеюсь, это имеет смысл!


person Hardik Raval    schedule 30.10.2020    source источник


Ответы (1)


Вашего помощника increment будет достаточно, если вы опустите параметр value. Параметр заставляет ваши партиалы знать, каким должен быть начальный номер, но это именно та проблема, которая привела вас к созданию помощника — ваши партиалы не знают начального номера.

Если вы создадите одну переменную для хранения счетчика приращений, а помощник будет увеличивать это значение и возвращать его при каждом вызове, это будет работать нормально. Помощник становится:

let count = 0;
Handlebars.registerHelper("increment", function () {
     return ++count;
});

И он будет вызываться из шаблона или партиала просто так: {{ increment }}.

Я создал скрипку для справки.

person 76484    schedule 30.10.2020
comment
Как я могу снова обнулить эту переменную? - person Hardik Raval; 02.11.2020
comment
@HardikRaval: При каких условиях вы хотели бы его сбросить? - person 76484; 02.11.2020
comment
Я создаю PDF-файл с использованием шаблона руля, поэтому каждый раз, когда я нажимаю на конечную точку, я визуализирую контент из шаблона. Поэтому, когда я снова попаду в эту конечную точку, я хочу сбросить эту переменную. Прямо сейчас он продолжает увеличиваться и никогда не сбрасывается. - person Hardik Raval; 02.11.2020
comment
@HardikRaval: Честно говоря, я думаю, что передача аргумента reset помощнику слишком сложна и сложна. Для вашего варианта использования я думаю, что лучший подход - не использовать помощника, а вместо этого перебирать и назначать каждой строке каждой таблицы совокупный индекс. Это будет сделано в контроллере, а результат будет передан в шаблон. Например: jsfiddle.net/76484/rgdetaoc - person 76484; 02.11.2020