Драпируем клиентский код
Команда разработчиков Redtape в ходе решения одной задачи на днях наткнулась на проблему - создать группу "радиокнопок" в Рельсах значительно сложнее, нежели, к примеру, элемент select. Аналогично, создать группу флажков намного сложнее, чем multiple select. В качестве значения им нужно было устанавливать поле, которое в ActiveRecord модели было представлено сериализованной переменной. В случае с группой флажков туда нужно было писать массив, сама форма была глубоко вложенной, и, начав писать erb код, мы почти мгновенно в нём утонули.
Через некоторое время прозвучало "Эврика!". Select и Radiogroup концептуально - одно и то же. Multiple select и Checkbox group - опять-таки одно и то же. Так почему бы не описать в erb простой "select" и не превратить его в Radiogroup с помощью клиентского кода?
Так родился JQuery Drapper. Его смысл в том, что проектируя html, вы стараетесь сделать максимально простой и семантичный html. Соответственно, select у вас - это именно select, а что там нарисовал дизайнер, группу радиокнопок или вылетающее окошко с набором ссылок - это лирика. Лирику и берёт на себя drapper. Он может спрятать исходный элемент управления и нарисовать вместо него нечто совершенно непохожее, вдобавок организовав связь между исходным элементом и его представлением (то, что принято называть binding). Примеры на странице плагина весьма говорящие: текстовые поля с порядковым номером элемента превращаются в список, сортируемый перетаскиванием, а текстовое поле превращается в элегантный слайдер.
Плагин написан достаточно модульно, чтобы написание собственных драпперов было удобным и приятным.
Если вы сталкиваетесь с задачей, которую можно решить простым и изящным html'ем, но дизайну это не соответствует и приходится городить огород, то возможно вам поможет JQuery Drapper.