Rails: button_tag против обычной кнопки% на HAML - PullRequest
0 голосов
/ 08 ноября 2018

Я обнаружил, что есть 2 способа создания кнопок на Ruby on Rails. Мы используем HAML для наших шаблонов.

Первый способ:

= button_tag 'Submit', type: 'submit', class: 'btn btn-primary primary-button'

Второй способ:

%button.btn.btn-primary.primary-button{ type: 'submit' } Submit

Оба способа конвертируют его в HTML.

Что мне выбрать? Есть ли плюсы / минусы использования или / или? Это просто вопрос предпочтений?

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Это действительно зависит от того, что вам нужно. Если вы используете помощника только для рендеринга базового тега кнопки HTML, то может быть даже быстрее использовать тег HTML, даже не требуя HAML. Я предполагаю, что речь идет о контексте, где у чего-то могут быть плюсы и минусы.

%button.btn.btn-primary.primary-button{ type: 'submit' } Submit
<button class="btn btn-primary primary-button" type="subimt">Submit</button>

Это будет быстрее, поскольку rails даже не нужно переводить код HAML в HTML.


НО, помощник button_tag будет использоваться внутри формы, которая уже является помощником form_for / tag / with, окруженной другими помощниками text_field / text_field_tag, text_area / text_area_tag и т. Д., И имеет больше смысла просто использовать помощник button_tag для согласованности.

Вы можете задать тот же вопрос о% input {type: "text"} против text_field_tag, но проще использовать хелперы, поскольку он действительно легко обрабатывает имена полей для работы с рельсами из коробки: у вас могут быть префиксы, суффиксы, он обрабатывает массивы и т. д., а для сложных и вложенных форм это может быть проблемой в заднице. Использование только HAML будет означать, что вам придется задавать имена вручную, поэтому вам нужно, чтобы помощники быстрее разрабатывали ваши формы.

Кроме того, у помощников есть больше опций, чем у общих атрибутов html, которые хорошо работают с rails-ujs: подтверждение, отключение, удаленное и т. Д. Конечно, вы можете реплицировать те же атрибуты данных, созданные этими опциями, но согласованность с другими помощниками будет профессионалом, если вы уже используете их, вам не нужно будет помнить, если опция remote: true - это запись data: {remote: true} или что-то еще.

Лично я всегда использую помощники форм rails, потому что я буду использовать их для форм и входных данных, поэтому вполне естественно использовать помощников submit_tag, button_tag и т. Д., Даже зная, что их довольно легко написать с помощью HAML.

И для последнего профессионала, я могу подумать, у вас может быть свой помощник button_tag. Если вы хотите, чтобы все ваши кнопки были класса «btn btn-primary», вы можете просто переопределить хелпер button_tag, и вам не нужно будет менять какое-либо представление.


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

У вас также есть минус кривой обучения. Все знают HTML, и переход с HTML на HAML в большинстве случаев прост. Преобразование тега HTML в параметры тега помощника требует, чтобы вы прочитали документы помощника, у него есть некоторые предостережения (кнопка f.bag_tag? И т. Д.). Я также не думаю, что это действительно большая проблема, у всего есть кривая обучения, и я думаю, что профессионалы того стоят.

0 голосов
/ 09 ноября 2018

Вы можете выбрать любой способ. Там нет плюсов и минусов. Это похоже на выход из консоли irb: вы можете набрать exit или quit, вы все равно выйдете. Просто вопрос предпочтений.

Что касается меня, я предпочитаю использовать второй способ, когда класс элемента статичен:

%button.btn.btn-primary.primary-button{ type: 'submit' } Submit

и первый способ, когда он рассчитывается динамически:

= button_tag 'Submit', type: 'submit', class: "btn btn-primary #{extra_class}"

(Конечно, если у вас будет свой собственный вспомогательный метод button_tag, разница будет. Но я не думаю, что вам нужно будет переопределять встроенные помощники.)

...