Избегайте повторений с помощью ‹label›

Когда я кодирую форму, я обнаруживаю, что делаю очень повторяющийся набор текста. Например, если я выстраиваю ряд <input> в таблицу, я могу написать

<tr>
  <td><label for="repeat">Repeat:</label></td>
  <td><input id="repeat" name="repeat"></td>
</tr>

где третий "repeat" необходим для отправки формы GET/PUT, первый и третий связаны друг с другом, третий — для доступа к DOM, а второй — для читателя (человека).

Если я избегаю выравнивания различных входов, необходимость в первом исчезает:

<p><label>Repeat: <input id="repeat" name="repeat"></label></p>

но обычно меня просят выстроить их в очередь.

Как правило, я считаю дублирование в коде (DRY) плохой вещью, поэтому, даже если это незначительно, я решил спросить, есть ли лучший способ. В нынешнем виде у меня есть четыре возможности для опечаток, три из которых касаются пользователя, а две могут вызвать программные проблемы в случае опечатки.


person Charles    schedule 21.06.2011    source источник


Ответы (2)


Как насчет выравнивания с помощью CSS (ширина или что-то в этом роде) и продолжать использовать свой код вместо таблиц и tds.

person Aziz Shaikh    schedule 21.06.2011
comment
Я не совсем уверен, как это сделать, так как я не знаю априори, какая ширина потребуется меткам (или придется ли их заворачивать и т. д.). - person Charles; 21.06.2011
comment
@Charles: но как таблицы жесткого кодирования и метки решают эту проблему? - person reinierpost; 23.06.2011
comment
@reinierpost: размеры таблиц автоматически изменяются в соответствии с их содержимым. Я не знаю способа имитировать это в CSS — разве что, создав таблицу в CSS, что тоже не кажется правильным. - person Charles; 23.06.2011
comment
@Charles: это зависит от ограничений на изменение размера. Таблицы делают то, что я не знаю, как воспроизвести с помощью CSS, — это автоматическое выравнивание как столбцов, так и строк без каких-либо других ограничений на высоту или ширину ячеек. - person reinierpost; 23.06.2011
comment
@reinierpost: Верно, это и моя позиция. - person Charles; 24.06.2011

Что ж, очевидно, вы правы насчет многословности html, которая не всегда соответствует DRY-принципу. И следующее повторение происходит в коде на стороне сервера, который обрабатывает форму. Но, как вы правильно выразились, каждое из этих «повторений» имеет свое значение и может содержать и другую строку.

Обычно я пытаюсь вывести DRY на более высокий уровень, не кодируя html-формы вручную, а используя веб-фреймворк (в моем случае Django), который автоматически генерирует html-форму. Это делает ваш вопрос неактуальным для меня.

person jammon    schedule 21.06.2011
comment
На самом деле я закончил HTML для этого проекта и работаю над серверным кодом; дополнительные дублирования были тем, что заставило меня задать вопрос (что-то вроде «в следующий раз»). - person Charles; 21.06.2011
comment
Хорошо, снова позвольте мне повторить мою заглушку для фреймворков. HTML (и другие XML-подобные языки), на мой взгляд, не предназначены для редактирования вручную. Для верстки сайта есть dreamweaver или kompozer (или собрать его по многократно используемым шаблонам), а для интерактивной части — веб-фреймворки. Взгляните на формы django, так как я использую это, HTML мне стало намного легче. - person jammon; 21.06.2011