[英]Passing block to label helper in rails3
我想用一些嵌套元素創建標簽標簽。 我正在使用標簽輔助程序,並嘗試將內部html作為塊傳遞,但生成的HTML看起來不符合我的預期。 ERB:
<span>Span element</span>
<%= label("object", "method") do %>
<span>Inner span</span>
<% end %>
HTML輸出:
<span>Span element</span>
<span>Inner span</span>
<label for="object_method">
<span>Span element</span>
<span>Inner span</span>
</label>
當我使用<%%>標記傳遞內部html時,其輸出應為:
ERB:
<span>Span element</span>
<%= label("object", "method") do %>
<% raw '<span>Inner span</span>' %>
<% end %>
HTML輸出:
<span>Span element</span>
<label for="object_method">
<span>Inner span</span>
</label>
我想知道這是我在ActionView標簽助手中的錯誤還是錯誤。 對於其他助手,阻止傳球效果很好。
謝謝,Michał
我的理解是,在這種情況下,您需要使用label_tag幫助器:
<%= label_tag "my_label_name" do %>
<span>Inner span</span>
<% end %>
這樣做的原因是,盡管表單標簽幫助器為您填寫了“ for”屬性(使用模型對象屬性),但您不需要嵌套元素。
當您有一個打開的標簽標簽(而不是自動關閉的標簽)包裝內部內容時,不需要“ for”屬性,因為標簽顯然與其嵌套內容相關聯(這稱為隱式關聯)。
因此,這是預期的行為-看起來Rails團隊已故意以此方式構建它。
盡管我將更進一步,Scott Lowe的答案是正確的……您甚至不需要為此使用Rails label_tag。 像這樣使用原始html:
<label>
<span>Inner span</span>
</label>
如果要將標簽與表單元素(如單選按鈕)相關聯:
<label>
<%= f.radio_button :approval_state, 'R' %>
Rejected
</label>
在Rails 3.2.11中,這對我有用:
<span>Span element</span>
<%= label :item, :method do %>
<span>Inner span</span>
<% end %>
結果:
<span>Span element</span>
<label for="item_method">
<span>Inner span</span>
</label>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.