Набор инструментов для танцев и шаблонов: ‹выбрать› предыдущее выбранное

Я использую инструментарий шаблона с Perl Dancer. У меня есть форма, и эта форма имеет выбор. Я пытаюсь после отправки формы и возврата страницы к той же форме, сохранить предыдущий элемент, выбранный при выборе. Ldap_List содержит 10 элементов.

Это код выбора:

<form class="well form-inline" method="post" action="[% request.uri_base %]/foo/ldap">
<fieldset>  
<legend>Select the LDAP:</legend>
<select class="selectpicker" name="ldap_selected">
[% FOREACH ldap IN Ldap_List %]
   <option value=[% ldap %]>[% ldap %]</option>
[% END %]
</select>
<button type="submit" class="btn btn-primary">Go!</button>
</fieldset>
</form>

Переменная с последним выбранным ldap — ldap_selected, она определена и имеет правильное значение, я проверил ее с помощью:

[% IF ldap_selected %]
   [% ldap_selected %]
[% END %]

Я пробовал это, но не работает:

<select class="selectpicker" name="ldap_selected">   
   [% FOREACH ldap IN Ldap_List %]
       [% IF ldap == ldap_selected %]
           <option value=[% ldap %] selected>[% ldap %]</option>
       [% ELSE %]
           <option value=[% ldap %]>[% ldap %]</option>
       [% END %]
   [% END %]
</select>

Потому что при этом в выборе появляется ldap_selected, но это единственный вариант в списке.

Как я могу достичь этого?


person user3452713    schedule 29.03.2014    source источник


Ответы (1)


Вам просто нужен простой тег HTML Form вокруг тега Select, а затем прочитать параметры Form внутри вашего Perlscript с чем-то вроде params->{'ldap_selected'}. Я могу предложить прочитать Dancer Документацию.

В этом случае вы можете начать смотреть здесь


РЕДАКТИРОВАТЬ:

После вашего редактирования это кажется проблемой Template Toolkit. Вы сказали, что у вас есть Значение ldap_selected, и это, кажется, то значение, которое вам нужно. [% IF ldap == ldap_selected %] это именно то, что вам нужно сделать. Ваш синтаксис правильный.

Я вижу 2 возможные проблемы/решения:

  1. ldap_selected содержит новую строку или не установлен.
  2. ldap содержит новую строку.

Проверьте с помощью ctrl+u в браузере вывод каждой переменной. Может быть, вы видите новую строку. Попробуйте часть IF ... с жестко заданным ldap_selected ([% IF ldap_selected == 'foo' %]) и с

[% FOREACH ldap IN [ 'foo', 'bar', 'baz' ] -%]

Часть ldap.

Если ничего не работает, проверьте, не изменили ли вы конфигурацию TT в своем MyWeb-App/config.yml.

person Community    schedule 29.03.2014
comment
Я отредактировал свой пост, выбор находится внутри формы. Проблема заключается в том, как проверить внутри foreach, имеет ли текущий элемент цикла то же значение ldap_selected. - person user3452713; 30.03.2014
comment
взгляните на мой РЕДАКТИРОВАТЬ :) - person ; 30.03.2014
comment
Спасибо! Решено :) Новые строки ›.‹ - person user3452713; 30.03.2014