在ERB视图中包含以下代码:
<%= content_tag(:div, id: 'stat', data: {_var_: '_foo_'}) %>
生成以下HTML:
<div id="stat" data--var-="_foo_">
</div>
我的目的是获得
<div id="stat" data-_var_="_foo_">
</div>
即。我不想要
data--var-
但是
data-_var_
我怎么能实现这个目标呢?
答案 0 :(得分:3)
如 ActionView :: Helpers :: TagHelper docs所示:
为了很好地使用JavaScript约定子属性 底线转换即可。例如,密钥 user_id 将呈现为 data-user-id 并因此作为dataset.userId。
访问
为了说明,您可以检入 Rails源代码(tag_helper.rb)prefix_tag_option
调用key.to_s.dasherize
:
def content_tag(name, content_or_options_with_block = nil, options = nil, escape = true, &block)
#...#
content_tag_string(name, content_or_options_with_block, options, escape)
#...#
end
def content_tag_string(name, content, options, escape = true)
tag_options = tag_options(options, escape) if options
#...#
end
def tag_options(options, escape = true)
# ...
# TAG_PREFIXES = ['aria', 'data', :aria, :data].to_set
# invoke prefix_tag_option only if it's a data- sub-attributes
if TAG_PREFIXES.include?(key) && value.is_a?(Hash)
#...#
output << prefix_tag_option(key, k, v, escape)
end
#...#
end
def prefix_tag_option(prefix, key, value, escape)
key = "#{prefix}-#{key.to_s.dasherize}"
#...#
end
如果您不想 dasherize 您的密钥,可能“解决方法”是直接设置data-attribute
在选项哈希中,如下所示:
<%= content_tag(:div, "test", { id: 'stat', 'data-_var_': '_foo_' }) %>
这样,Rails将呈现:
<div id="stat" data-_var_="_foo_">test</div>