2012-06-19 32 views
1

我正在使用f.semantic_fields_for與hamlsemantic_fields_for不會全部組合成一個li

這裏是當前的片段。

 %ul.documents 
     =f.semantic_fields_for :documents do |u| 
      = link_to(u.object.comment.presence || u.object.file.original_filename, u.object.file.url)                      
      = u.input :comment, :as=>:string 
      = u.hidden_field :_destroy 
      = link_to_function image_tag("/img/del_documets.png"), "remove_fields(this)", :class => "btn" 

這裏的問題是,只有 「u.input:評論,:如=>:字符串」 是formtastic創作的 「禮」 內。鏈接和其他字段可以在其他地方找到,並且它不可能正確地設計這個破壞的html。

無論如何要確保一切都在正確的裏面嗎?

即使我在f.semantic_fields_for之後添加一個li,它將只包裝第一個鏈接,並且以下元素將僅包含完全在ul上方的ul。

回答

1

似乎formtastic總是用<li>包裝輸入,以避免<fieldsets><ol>之內,這是無效的。

你最好的解決辦法是把<li>放在你的所有元素周圍,如果你願意的話可以加上wrapper_html => { :class => :your_class }。這樣你可以按照自己的方式來設計風格。

我不認爲你需要圍繞輸入ul.documentssemantic_fields_for已經包裝所有使用<ol>

與直接生成html的庫不同的是,您最好調整自己的html和css而不是試圖讓它們生成html。

我會做到這一點(並從中樣式我自己的CSS):

=f.semantic_fields_for :documents do |u| 
     %ul.documents 
     %li= link_to(u.object.comment.presence || u.object.file.original_filename, u.object.file.url)                      
     = u.input :comment, :as=>:string 
     %li= u.hidden_field :_destroy 
     %li= link_to_function image_tag("/img/del_documets.png"), "remove_fields(this)", :class => "btn" 

希望這有助於。

+0

問題是,我的所有元素必須在一行。這給了我四個LI,雖然我可以在UL中包裝這些LIs,但是這是相當醜陋的 –

+0

也hidden_​​field沒有被包裝的li –

1

您也可以覆蓋Formtastic的默認行爲時,它所產生的inputs包裝是這樣的:

module Formtastic 
    module Inputs 
    module Base 
     module Wrapping 
     def input_wrapping(&block) 
      template.content_tag(:li, 
      [template.capture(&block), error_html, hint_html].join("\n").html_safe, 
      wrapper_html_options 
     ) 
     end 
     end 
    end 
    end 
end 

通知的content_tag(:li。例如,您可以將其替換爲content_tag(:div

你知道如何在Rails中覆蓋模塊方法嗎?

+0

這可能是一種獲得好結果的方式,但我需要將參數傳遞給輸入以便不更改默認行爲。無論如何我無論如何都不滿意,因爲我沒有太多的時間改變一切 –

+0

感謝您的投票! –