2011-03-18 101 views
0

想象一下有3個選項的下拉菜單:A,B,C和ID爲myform的div。 當用戶從列表中選擇一個選項時,應將div的內容替換爲與該選項相對應的表單。事情是,形式沒有共同之處。如何創建此動態表單?

我想以下列方式解決這個的:

  • 創建一個新的控制器FormCreator
  • 創建一個新的動作build_form,這將需要一個類型作爲參數(A/B/C)
  • 創建A.html.erbB.html.erbC.html.erb
  • 取決於類型,我將呈現或者A/B/C,與佈局呈現禁用
  • 使用ajax替換控制器生產的div的內容

有沒有更好的方法來做到這一點?

回答

1

這裏的準則我會怎麼做:當一些選項,例如A,使用AJAX GET AController#new作爲JSON並返回erb呈現的表單。比$('#myForm')。html(withResponse)。主要思想是,在select.change事件中,您可以啓用正確的資源控制器新操作,並用它的響應替換div內容。

不完整的答案,但我希望它會給你一個想法

0

爲什麼不只隱藏表單並在選擇列表選擇時顯示/隱藏它們?從哪個控制器或操作呈現表單/選擇列表並不重要,但它們可能應發佈到其自己的控制器,並僅在呈現驗證失敗時呈現之前發佈的表單。

0

使用選擇與打電話給你的AJAX控制器一個javascript:平變化=> remote_function(...)

在你的控制器=>

def FormCreator 
    if params[:form] == 1 
    render :update do |page| 
     page.replace_html 'form_div', :partial => 'form_1' 
     #make a file with just the form called _form_1.erb, this is called a partial 
     #because the file name starts with '_' 
     #form_div is the id of the div that holds all 3 forms. 
    end 
    end 
    #repeat for all forms 
end 
+0

有可能這樣做的一個更合適的方法,但它的早期,昨天是聖帕特里克節,這將讓你開始... – 2011-03-18 12:40:16

+0

但是,如果我發佈到與當前不同的控制器,這仍然適用? – Geo 2011-03-18 14:30:50

+0

是的,你可以這樣調用它:remote_function(:url => {:controller =>'formstuff',:action =>'FormCreator'} ......) – 2011-03-18 19:07:09