2010-09-15 3 views
4

Я обнаружил, что указываю: rows => 5 на все мои помощники формы text_area, поэтому я просмотрел его определение и нашел DEFAULT_TEXT_AREA_OPTIONS хешем, диктующим эти параметры. Тем не менее, хэш имеет этот метод замораживания на нем, и я искал его, это означает, что он не может быть изменен. Если вы могли бы порекомендовать мне некоторые варианты, чтобы попытаться сделать приложение в целом: rows => 5 для всей области текста, я бы очень признателен.Изменить значение по умолчанию Rails text_area helper rows/cols

Благодаря

ответ

6

Вы можете сделать:

  1. Написать собственный помощник:

    четкости readable_text_area (форма, метод, параметры = {}) form.text_area (метод, опции) end

  2. или переопределить метод text_area, делегируя исходное текстовое поле с соответствующими параметрами

  3. или продлить действие ActionView :: Помощники :: InstanceTagMethods с помощью собственного метода «my_text_area» и делегировать оригинальную текстовую область с соответствующими параметрами. Затем вы можете использовать "f.my_text_area (...)"

  4. или изменить DEFAULT_TEXT_AREA_OPTIONS:

.

module ActionView::Helpers::InstanceTagMethods 
    remove_const :DEFAULT_TEXT_AREA_OPTIONS 
    DEFAULT_TEXT_AREA_OPTIONS = { "cols" => 40, "rows" => 5 } 
end 

Вариант 1 самый чистый. 2 & 3 патча известный публичный интерфейс - кажется приемлемым. 4 внутренних патча - рискованные.

+0

OH ничего себе, спасибо за такие подробные ответы с факторами риска. Я пойду с (1). Благодаря! –

2

Я фанат:

class ActionView::Helpers::InstanceTag 
    silence_warnings do 
    DEFAULT_FIELD_OPTIONS = {} 
    DEFAULT_TEXT_AREA_OPTIONS = {} 
    end 
end 

Как @gertas предупреждала это латание внутренностей, так что приходит с риском. Иногда эти константы перемещались в Rails. Но в целом это не огромная сделка. Либо:

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

Так что это связано с риском. Но не так много, и это самый прямой способ настроить эти значения по умолчанию.

+0

Привет, Эрик, спасибо, что дали свои взгляды на это. Вы правы в том, что риск состоит в том, что риск на самом деле не так уж и много. И что я использую CSS, чтобы так или иначе определять ширину. Причина, по которой я хотел использовать атрибут rows вместо прямой ширины, - это 1) я вообще-то не люблю CSS, но это тривиально, 2) установка строк здесь кажется мне правдой, потому что как элемент HTML, сколько строки, как мне кажется, должны быть выделены синим цветом, где он определен/называется. –

+0

Эти параметры по умолчанию будут удалены из Rails, поэтому безопасно использовать это. См. Https://github.com/rails/rails/issues/5324 –

Смежные вопросы