【问题标题】:Change default Rails text_area helper rows/cols更改默认 Rails text_area 辅助行/列
【发布时间】:2011-04-12 19:15:40
【问题描述】:

我发现自己在我的所有 text_area 表单助手中指定了 :rows => 5,因此我查看了它的定义并发现 DEFAULT_TEXT_AREA_OPTIONS 是指示这些选项的哈希。但是,哈希上有这个冻结方法,我查了一下,这意味着它不能更改。如果您可以向我推荐一些选项来尝试为所有文本区域执行应用程序范围的 :rows => 5,我将非常感激。

谢谢

【问题讨论】:

    标签: ruby-on-rails helpers


    【解决方案1】:

    我喜欢:

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

    正如@gertas 警告的那样,这是在修补内部结构,因此会带来风险。这些常量偶尔会在 Rails 中移动。但总的来说,这并不是什么大问题。要么:

    1. 您将 CSS 用于宽度和高度,因此这些属性无论如何都会被忽略。在这种情况下,您所做的只是避免在屏幕上移动一些无用的字符。如果它停止工作,你只需多花几个字符,直到你注意到它。
    2. 您正在使用这些属性,因此当 hack 停止工作时,它会变得很明显(字段大小发生变化),您可以快速修复它。

    所以它确实有风险。但不多,这是调整这些默认值的最直接方法。

    【讨论】:

    • 您好,Eric,感谢您对此发表意见。你说得对,风险其实并不大。而且我确实使用 CSS 来决定宽度。我想使用 rows 属性而不是 width 的原因是 1)我一般不喜欢 CSS,但这很简单,2)在这里设置行对我来说似乎是正确的,因为作为 HTML 元素,有多少我认为,它得到的行应该在定义/调用的地方进行蓝图。
    • 这些默认选项将从 Rails 中删除,因此使用它是安全的。见github.com/rails/rails/issues/5324
    【解决方案2】:

    你可以这样做:

    1. 编写自己的助手:

      def readable_text_area(form, method, options = {}) form.text_area(方法,选项) 结束

    2. 或使用适当的选项重新定义 text_area 方法委托给原始 text_area

    3. 或使用您自己的方法“my_text_area”扩展 ActionView::Helpers::InstanceTagMethods 并使用适当的选项委托给原始 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 个补丁内部 - 有风险。

    【讨论】:

    • 哦,哇,感谢您提供有关风险因素的详细答案。我会选择(1)。谢谢!
    猜你喜欢
    • 2016-12-05
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 2012-11-25
    • 1970-01-01
    • 2020-10-19
    相关资源
    最近更新 更多