Ruby如果条件在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('' == 'colName'){ $("#3").text(" "var")) %>"); } else if('' == 'colName2'){ $("#2").text(" "var1")) %>"); } 

查看部分:

_var.html.erb

   

_var1.html.erb

   

如果我更改此代码

 $("#3").text(" "var") %>"); 

提醒(“hi_one”);

 $("#2").text(" "var1") %>"); 

提醒(“hi_two”);

它工作正常。

但是当我把上面的代码放在一起时,它每次都运行代码,不知道为什么,是编译它还是什么? 什么出路?

渲染输出:

渲染测试/ _var.html.erb(16.0ms)渲染测试/ AjaxView.js.erb(19.0ms)在38ms内完成500内部服务器错误

ActionView :: Template :: Error(缺少属性:colName):1:

Firebug中的Javascripty输出是500错误

目前您的条件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调用。 这意味着两个部分的内容必须在两个场景中都有效(即使是最终不会被使用的场景)。

要解决此问题, colName2在您的: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 %>