2010-08-05 41 views
6

我打算做的功能是插入一些表單元素,取決於從選擇標記中選擇的數字。呈現從jquery和哈姆的部分

我有一個名爲number_of_passengers的選擇標籤,我打算爲所選號碼動態添加新的乘客字段。假設我從number_of_passengers中選擇2,那麼2個表單應該出現在字段集中。這些形式包括姓名,年齡,體重等

我嘗試以下這一點:

call a rails function from jquery?

,只是把它轉換到HAML發言,但每當我用的是我得到的錯誤:JavaScript代碼。此外,我不認爲我能「逃脫」的JavaScript代碼,一旦我在呢

:javascript 
    $('#number_of_passengers').change(function() { 
    var $num_of_passengers = $(this).val(); 
    for($i=0; $i<$num_of_passengers;$i++) { 
     $('.passenger-info ul').append('<%= escape_javascript(render :partial => "new_passenger", :locals => {:booking => @booking }) %>'); 
    } 
    }) 

也因爲我在的form_for,我怎麼了@booking變量傳遞到本地?看起來非常複雜,我打算做循環20次(最多20位乘客)的骯髒方式,然後根據選定的號碼隱藏/顯示它們。但那太骯髒了,你不覺得嗎?

回答

3

我實際上設法通過將做到這一點:

respond_to do |format| 
    format.js { render :partial => "new_passenger" } 
end 

所以即使請求是在JS,它會返回部分的HTML。 Nifty

+0

你有沒有試過我的答案?如果不清楚:你在haml裏面使用了erb樣式插值,但是很高興你找到了一些有用的東西 – nathanvda 2011-02-18 07:37:54

+0

我試圖理解什麼你在這裏做過,也有興趣根據javascript條件內容來渲染一些HTML,「new_passenger」在哪裏存在?你的答案;你在哪裏放置這個代碼? – Tass 2011-11-14 22:33:03

+0

new_passenger與控制器存在於同一個視圖文件夾中,所以在我的情況,預訂管理員稱這是在應用程序/視圖/預訂中 – corroded 2011-11-15 10:30:35

0

Rails的語法時刻都在變化,但不應該這樣

render :partial => "new_passenger", :locals {:booking => @booking }) 

render :partial => "new_passenger", :locals => {:booking => @booking }) 

可以的JavaScript塊中逃脫的JavaScript,因爲你正在評估紅寶石標籤。

您收到哪些錯誤消息?

你問題的後半部分是我不清楚,但是這是你在找什麼:

- form_for @user do |f| 
    # f.object is equal to @user 
+0

嗨,感謝您的回覆。我因爲生病而退出戒菸。無論如何,我已經修好了這個錯字,但我仍然難倒了。我會稍微編輯一下這個問題,並告訴你問題 – corroded 2010-08-09 14:58:46

12

爲了得到插值工作,你需要做的是這樣

!= "$('.passenger-info ul').append('#{escape_javascript(render :partial => 'new_passenger', :locals => {:booking => @booking })}'); 

這麼簡單的說:把!=加到行的開頭,並在雙引號之間加上字符串。

您對@booking的問題:我建議您研究一些嵌套的窗體示例以使其更清晰(例如,thisthis railscast)。

+0

恩,謝謝! !=是什麼意思?我現在只需將其加入書籤並在將來檢查,因爲我剛剛使用了硬編碼的js(手動插入了表單html ...髒,但它工作正常)。它會很快被重構,雖然 – corroded 2010-08-17 11:29:05

+0

'!='意味着unescape HTML,所以它會按原樣插入ruby字符串,而不會轉義它。與正常的'='不同,它評估和轉義字符串,以便安全地包含在HTML中。更多在這裏:http://haml-lang.com/docs/yardoc/file.HAML_REFERENCE。html#unescaping_html – nathanvda 2010-08-17 11:44:45

+1

更簡單...使用:普通過濾器(不是:javascript)。 – Karl 2011-02-17 17:57:27