红宝石,如果条件不正常工作的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错误
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
两个colName
和colName2
或改变if
作为服务器端,以便您只用.text
行中的一个来响应。例如
<% if @col == 'colName' %>
$("#3").text("<%= escape_javascript(render(:partial => "var")) %>");
<% elsif @col == 'colName2' %>
$("#2").text("<%= escape_javascript(render(:partial => "var1")) %>");
<% end %>
感谢迈克,这是一个很好的解释。它确实解决了我的问题。 – 2012-01-05 08:00:58
DOM元素ID不能是数字并且是有效的HTML。 – 2012-01-03 13:18:26
大卫,我改变了它,但我仍然得到同样的问题 – 2012-01-03 13:36:29
它呈现什么? – 2012-01-03 13:44:15