Конструктор форм Rails 4 с полной поддержкой Twitter Bootstrap 3

Существуют ли какие-либо совместимые с Rails 4 гем-конструкторы форм, которые обеспечивают всестороннюю поддержку форм Twitter Bootstrap 3.0.0?

Вот эталон того, что я бы назвал «всесторонней» поддержкой:

  • Поддержка всех 3 макетов (базовый, горизонтальный, встроенный)
  • Поддержка основных типов ввода (ввод, текстовое поле, выбор и т. д.)
  • Поддержка как сложенных, так и встроенных флажков/переключателей
  • Поддержка всех состояний ввода (фокус, отключено, проверка)
  • Поддержка справочного текста/сообщений об ошибках
  • Поддержка input-append/prepend (теперь называется input-group в TWBS3).
  • Поддержка работы с конкретными элементами формы Rails, например. date_select (встроенные поля выбора)

См. документацию по TWBS3 и WIP github issue для получения подробной информации о формах TWBS3.

Я просмотрел как simple_form, так и twitter_bootstrap_form_for, и хотя оба они продвигаются вперед, ни один из них не предлагает достаточного решения на данный момент.

Простая форма

Кажется, есть решение для базовой компоновки, однако, насколько я вижу, горизонтальные формы в настоящее время невозможны из-за дополнительной разметки сетки, необходимой для TWBS3.

https://github.com/plataformatec/simple_form/pull/864 https://github.com/plataformatec/simple_form/issues/857

Форма начальной загрузки Twitter

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

https://github.com/stouset/twitter_bootstrap_form_for/pull/84


person tommarshall    schedule 02.09.2013    source источник
comment
есть прогресс в этом?   -  person caarlos0    schedule 03.09.2013
comment
Я развил версию twitter_bootstrap_form_for из запроса на включение (поскольку сопровождающий, похоже, передает проект) и внес некоторые исправления. Хотя я не совсем доволен API (и код немного неряшлив), поэтому я не планирую использовать его в долгосрочной перспективе, но пока это то, что я использую. github.com/tommarshall/twitter_bootstrap_form_for . Скрестим пальцы, кто-то знает что-то лучше.   -  person tommarshall    schedule 05.09.2013
comment
Спасибо! Я взгляну. Ваше здоровье   -  person caarlos0    schedule 05.09.2013
comment
К сведению: я еще не обновлял документацию, и некоторые из внесенных мной изменений изменили API. Я постараюсь найти время, чтобы обновить README где-нибудь на этих выходных.   -  person tommarshall    schedule 05.09.2013
comment
github.com/rafaelfranca/simple_form-bootstrap/pull/28 один из основные участники работают над этим   -  person Harry Moreno    schedule 25.09.2013
comment
Это очень важный и важный вопрос, с которым сталкиваются многие люди вроде меня, особенно при обновлении с rails 3.2 до rails 3.4. Simple_form 2.x не поддерживает Bootstrap 3, и многие проекты облажались, потому что единственный выход — болезненный процесс обновления.   -  person Shaunak    schedule 04.06.2015


Ответы (3)


По моему собственному опыту работы с Bootstrap и подходом simple_form/form_builder, простая_форма не стоит проблем. Есть слишком много вещей, которые простая форма не имеет решения для макета и управления, некоторые ключевые черные пятна — это классы на тегах-оболочках, выборки с атрибутами html или выполнение чего-то простого, например групп кнопок начальной загрузки, которые имитируют переключатели / переключатели. Поддержка i18n в simple_form также была проблемой, требующей большого количества дублирований.

Также подумайте, подходит ли рендеринг на стороне сервера для современного приложения. Я перехожу от традиционного рендеринга на стороне рельсов/сервера к модели SPA (одностраничное приложение). Для этого я использую backbone.js и marionette с эко-шаблонами и coffeescript.

С архитектурной точки зрения подход к конструктору форм simple_form/rails кажется ошибочным, и в нем содержится много запутанного кода, по существу, для построения фрагмента строки html.

Что ж, я говорю, что для этого и нужны шаблоны представлений!

В конце концов, представление состоит из множества различных шаблонов подпредставлений (например, частичных), и я думаю, что оно должно идти прямо к элементам управления/полям. Напротив, подход Builder всегда страдает от отсутствия поддержки различных компонентов jquery и недостаточно гибок, чтобы идти в ногу со временем.

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

Не замыкайтесь на возможностях конструктора форм, используйте примеры документации boostrap в качестве отправной точки для своих шаблонов и просто вызывайте их!

person Andrew Hacking    schedule 01.10.2013

Вы проверили https://github.com/potenza/bootstrap_form? Мы только что добавили поддержку Bootstrap 3, и он очень легкий.

Мы поддерживаем почти все ваши требования, но мы все еще работаем над хорошим решением для выбора даты и времени, поскольку в настоящее время они сгруппированы по умолчанию.

Вот пример формы в erb:

<%= bootstrap_form_for(@user) do |f| %>
  <%= f.email_field :email %>
  <%= f.password_field :password %>
  <%= f.check_box :remember_me %>
  <%= f.submit "Log In" %>
<% end %>

И вывод:

<form accept-charset="UTF-8" action="/users" class="new_user" id="new_user" method="post">
  <div class="form-group">
    <label for="user_email">Email</label>
    <input class="form-control" id="user_email" name="user[email]" type="email">
  </div>
  <div class="form-group">
    <label for="user_password">Password</label>
    <input class="form-control" id="user_password" name="user[password]" type="password">
  </div>
  <div class="checkbox">
    <label for="user_remember_me">
      <input name="user[remember_me]" type="hidden" value="0">
      <input id="user_remember_me" name="user[remember_me]" type="checkbox" value="1"> Remember me
    </label>
  </div>
  <input class="btn btn-default" name="commit" type="submit" value="Log In">
</form>
person Stephen Potenza    schedule 23.12.2013
comment
Я рад, что наткнулся на это, вырвал хороший кусок хакерства simple_form! Спасибо за жемчужину! - person Nick Veys; 31.01.2014
comment
Я нашел bootstrap3-datetimepicker-rails довольно замечательным решением для выбора даты и времени с дружественным к BS3 пользовательским интерфейсом. Однако мне пришлось преобразовать некоторые параметры, например: params[:event][:starttime] = DateTime.strptime(params[:event][:starttime], '%m/%d/%Y %I:%M %p') if params[:event][:starttime].present? - person Archonic; 25.09.2014

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

Вы можете следить за его ходом здесь: https://github.com/rafaelfranca/simple_form-bootstrap/pull/28

person MatthewFord    schedule 25.09.2013