2011-02-12 57 views
1

假設,我有一個複雜的嵌套形式,有很多字段。Ruby on Rails 3,窗體,ajax,嵌套,就地編輯,一個接一個。最佳做法

我想以ajax的方式逐個編輯它的字段,以便每次看到表單時都是'show'樣式(沒有字段來改變信息),但是可以切換任何特定的字段或使用自己的「保存」或「更新」按鈕進行「編輯」模式的一組字段。

解決這樣的問題,我結束了兩個方面:

  1. 超期使用的Ryan Bates' complex-form-examples
    這種方式的缺點是,每個字段(或一組字段)都需要它自己的代碼(即javascript:'insert_fields'),它呈現相應的'編輯'樣式表單,因此導致頁面被javascripts淹沒。

  2. 第二個 - 統一過程通過特殊的控制器動作(即get_partial)通過ajax加載相應的編輯部分,該編輯部分通過'編輯'形式給出字段區域的「render:do updates」。
    對於給定的字段或字段組,我有部分「編輯」和「顯示」。當我需要將該字段切換到編輯模式時,我通過ajax發送帶有必要參數的請求(link_to ...,'/.../get_partial?partial=foo',:remote => true),並且一些控制器#動作通過javascript呈現部分內容。

我認爲第二種方法更好,但我不明白如何優化它是最好的。

這個問題還有沒有更優雅的解決方案?

回答

0

如果您生成了一個普通的「編輯」表單(包括所有嵌套的字段等),然後讓javascript隱藏了字段並在其旁邊添加了字段的文本和編輯鏈接,那該怎麼辦?因此,例如說你的形式看起來像:

= form_for @foo do |f| 
    = f.text_field :name 

而JavaScript會這樣對待它(1):

= form_for @foo do |f| 
    = f.text_field :name, :class => "hide" 
    <the value of the field here> 
    = link_to "edit", "#" 

然後讓你的JavaScript單擊事件添加到編輯鏈接,當點擊後,確實:

= form_for @foo do |f| 
    = f.text_field :name 
    = f.submit "Save" 

那麼你需要更多的JavaScript,使保存按鈕提交表單(阿賈克斯),並返回到(1)上述

+0

這種解決方案與我在第一種方法中的意思相似。這種方法需要對每個字段進行雙重渲染 - 無論是「顯示」還是「編輯」樣式。我試圖避免用'隱藏/顯示'js的方法。而且我們在這裏還有當我編輯只有一個字段(由ajax顯示字段)時,整個表單被提交,即所有字段我甚至沒有決定改變。 – 2011-02-12 04:40:05