Я использую Template Toolkit и Perl для создания веб-страницы. У меня есть массив с идентификационными номерами, которые включают и выключают флажки, если это значение существует в массиве. Мне было интересно, есть ли более эффективный способ установить и отключить группу флажков при загрузке страницы. Есть какой-то предыдущий код, и он кажется медленным для загрузки, прежде чем я его получил. Я не хочу увеличивать время ожидания.
Это работает:
<label for="checkFedGround">
<input type="checkbox" name="Shipping" id="checkFedGround" value="11"
[% FOREACH ShippingID IN data.ShippingID %]
[% IF ShippingID == 11 %] checked="checked"
[% END %]
[% END %]
enabled />
FedEx Ground
</label>
Проблема в том, что для каждого из моих типов доставки придется выполнять цикл FOREACH. Мне кажется, будет много ненужной обработки. Допустим, в массиве 30 флажков и 10 идентификаторов. Это означает, что FOREACH будет проходить 10 раз для каждого флажка только для проверки одного идентификатора.
Я пытался использовать Template Toolkit::EXIST и аналогичные методы, чтобы проверить, находится ли идентификатор в массиве один раз, но он не работает так, как я хочу.
Это НЕ работает: это устанавливает флажок для значений, которые не входят в область действия.
<input type="checkbox" name="Shipping" id="checkFedGround" value="11"
[% IF (data.ShippingID(11)) %] checked="checked"
[% END %]
enabled />
FedEx Ground
Кто-нибудь знает лучший способ сделать это?
ОБНОВЛЕНИЕ/РЕШЕНИЕ: Спасибо за совет. Как и предполагалось, я использовал хэш для хранения данных. Я также отказался от идеи использования статических флажков в пользу списка выбора, который создает отсортированный список. JQuery считывает значение выбранных строк/флажков, обрабатывает хеш-массив и передает его в Perl.
<table> ...
<td> <input type="checkbox" name="ShippingID" value="[% service.ShippingID %]"
[% IF service.default %] checked="checked" [% END %]
style="margin: 0px;" />
</td> </table>
....
<select id="ShippingMethodSelect">
<option value="">Add Shipping Method...</option>
[% FOREACH service IN data.Shipping %]
<option value="[% service.ShippingID %]">[% service.description %]</option>
[% END %]
</select>