红宝石,如果条件不正常工作的JavaScript文件

问题描述:

控制器:红宝石,如果条件不正常工作的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

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