mza*_*zaj 6 label ruby-on-rails block actionview ruby-on-rails-3
我想用一些嵌套元素创建标签标签.我正在使用标签帮助器并尝试将内部html作为块传递,但生成的HTML看起来并不像我预期的那样.ERB:
<span>Span element</span>
<%= label("object", "method") do %>
<span>Inner span</span>
<% end %>
Run Code Online (Sandbox Code Playgroud)
HTML输出:
<span>Span element</span>
<span>Inner span</span>
<label for="object_method">
<span>Span element</span>
<span>Inner span</span>
</label>
Run Code Online (Sandbox Code Playgroud)
当我使用<%%>标记传递内部html时,输出应该是:
ERB:
<span>Span element</span>
<%= label("object", "method") do %>
<% raw '<span>Inner span</span>' %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
HTML输出:
<span>Span element</span>
<label for="object_method">
<span>Inner span</span>
</label>
Run Code Online (Sandbox Code Playgroud)
我想知道这是我的错误还是ActionView标签助手中的错误.对于其他助手,块传递工作正常.
谢谢,Michał
Sco*_*ott 11
我的理解是在这种情况下你需要使用label_tag帮助器:
<%= label_tag "my_label_name" do %>
<span>Inner span</span>
<% end %>
Run Code Online (Sandbox Code Playgroud)
这样做的原因是虽然表单标签助手为您填充了"for"属性(使用模型对象属性),但您不需要使用嵌套元素.
当你有一个打开的标签标签(而不是自动关闭),包装内部内容时,不需要"for"属性,因为标签显然与其嵌套内容相关联(这称为隐式关联).
所以,这是预期的行为 - 看起来Rails团队故意以这种方式构建它.
Scott Lowe 的答案是正确的,尽管我会更进一步......您甚至不需要为此使用 Rails label_tag。只需使用原始 html,如下所示:
<label>
<span>Inner span</span>
</label>
Run Code Online (Sandbox Code Playgroud)
如果您将标签与表单元素(如单选按钮)相关联:
<label>
<%= f.radio_button :approval_state, 'R' %>
Rejected
</label>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7323 次 |
| 最近记录: |