2

控制器:紅寶石,如果條件不正常工作的JavaScript文件

def AjaxView 
    @vars= Var.find(:all,:conditions => { :varName=> "one" },:select=>(params[:col])) 
    @col = params[:col] 
    respond_to do |format| 
    format.js { render :layout=>false } 
    end 
end 

AjaxView.js.erb

if('<%= @col %>' == 'colName'){ 
    $("#3").text("<%= escape_javascript(render(:partial => "var")) %>"); 
    } else if('<%= @col %>' == 'colName2'){ 
    $("#2").text("<%= escape_javascript(render(:partial => "var1")) %>"); 
    } 

查看部分:

_var.html.erb

<%= @vars[0].colName %> 

_var1.html.erb

<%= @vars[0].colName2 %> 

如果我這個代碼

$("#3").text("<%= escape_javascript(render(:partial => "var") %>"); 

更改爲警報( 「hi_one」);

$("#2").text("<%= escape_javascript(render(:partial => "var1") %>"); 

警報( 「hi_two」);

它工作正常。

但是當我把上面的代碼,它每次都運行代碼,不知道爲什麼,它編譯它或什麼?什麼是出路?

渲染輸出:

渲染測試/ _var.html.erb(16.0ms) 渲染測試/ AjaxView.js.erb(19.0ms) 完成在38MS

的ActionView 500內部服務器錯誤: :模板::錯誤(丟失屬性:COLNAME): 1:<%= @瓦爾[0] .COL%>

螢火蟲

Javascripty輸出是500錯誤

+1

DOM元素ID不能是數字並且是有效的HTML。 – 2012-01-03 13:18:26

+0

大衛,我改變了它,但我仍然得到同樣的問題 – 2012-01-03 13:36:29

+0

它呈現什麼? – 2012-01-03 13:44:15

回答

4

Currentl y您的情況if('<%= @col %>' == 'colName')客戶端 JavaScript。

這意味着,在

if('<%= @col %>' == 'colName'){ 
    $("#3").text("<%= escape_javascript(render(:partial => "var")) %>"); 
} else if('<%= @col %>' == 'colName2'){ 
    $("#2").text("<%= escape_javascript(render(:partial => "var1")) %>"); 
} 

兩個render :partial呼叫執行服務器端以便爲Rails呈現模板,但然後當生成的JavaScript來執行客戶端的邏輯確定哪個.text調用執行。這意味着,諧音的內容必須在這兩種情況下有效(甚至是一個最終是不會被使用。)

要解決它,無論是在您的:select兩個colNamecolName2或改變if作爲服務器端,以便您只用.text行中的一個來響應。例如

<% if @col == 'colName' %> 
    $("#3").text("<%= escape_javascript(render(:partial => "var")) %>"); 
<% elsif @col == 'colName2' %> 
    $("#2").text("<%= escape_javascript(render(:partial => "var1")) %>"); 
<% end %> 
+0

感謝邁克,這是一個很好的解釋。它確實解決了我的問題。 – 2012-01-05 08:00:58