簡體   English   中英

將塊傳遞到rails3中的標簽助手

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM