【问题标题】:How do I add an empty attribute to stylesheet_link_tag "application"?如何将空属性添加到 stylesheet_link_tag “应用程序”?
【发布时间】:2013-05-12 15:04:46
【问题描述】:

如何向<%= stylesheet_link_tag "application", :media => "all" %> 添加一个空属性?

我想给它添加data-skrollr-stylesheet emty 属性,所以输出的html是:

<link href="/assets/application.css?body=1" media="all" rel="stylesheet" type="text/css" data-skrollr-stylesheet>

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 html attributes ruby-on-rails-3.2


    【解决方案1】:

    你不能用助手来做到这一点。 stylesheet_link_tag 最终调用 tag,它使用 tag_options 方法呈现选项:

    def tag_options(options, escape = true)
      unless options.blank?
        attrs = []
        options.each_pair do |key, value|
          if key.to_s == 'data' && value.is_a?(Hash)
            value.each do |k, v|
              unless v.is_a?(String) || v.is_a?(Symbol) || v.is_a?(BigDecimal)
                v = v.to_json
              end
              v = ERB::Util.html_escape(v) if escape
              attrs << %(data-#{k.to_s.dasherize}="#{v}")
            end
          elsif BOOLEAN_ATTRIBUTES.include?(key)
            attrs << %(#{key}="#{key}") if value
          elsif !value.nil?
            final_value = value.is_a?(Array) ? value.join(" ") : value
            final_value = ERB::Util.html_escape(final_value) if escape
            attrs << %(#{key}="#{final_value}")
          end
        end
        " #{attrs.sort * ' '}".html_safe unless attrs.empty?
      end
    end
    

    请注意,选项始终以key=value 方式呈现。

    但是,您可以使用空字符串呈现属性:

    <%= stylesheet_link_tag "application", :media => "all", :data => {'skrollr-stylesheet' => ''} %>
    

    【讨论】:

    • 谢谢!我不敢相信这样的事情是如此复杂!
    • 我不确定 "BOOLEAN_ATTRIBUTES.include?(key)" 代表什么目的。我最终删除了它并且它有效!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    • 2023-01-26
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    相关资源
    最近更新 更多