繁体   English   中英

尝试在js.erb文件中使用控制器变量时抛出NoMethodError

[英]NoMethodError thrown when trying to use controller variables in js.erb file

在我的资产中,我有一个名为maps.js.erb的文件,基本上只有以下(调试)内容:

alert("<%= @map.width %>");

此JS文件通过属于maps的show.html.erb视图加载。

<%= javascript_include_tag params[:controller] %>
<h1><%= @map.title %></h1>
…

HTML文件本身显示地图的标题,例如,当浏览到/maps/1/ ,因为@map是在控制器中定义的。 但是,只要我包含JS文件,我就会收到以下错误:

地图中的NoMethodError#show

显示…/app/views/maps/show.html.erb ,其中第1行引发:

nil的未定义方法'title':NilClass(在…/app/assets/javascripts/maps.js.erb

  • 为什么@mapjs.erb文件中不可用?
  • 我怎么能访问我的控制器中定义的这个实例变量?

Ryan Bates就该主题做了一个截屏视频 - 你可能想看看它:

http://railscasts.com/episodes/324-passing-data-to-javascript


html.erb文件中,您可以定义变量:

<%= javascript_tag do %>
  window.productsURL = "<%=j products_url %>";
  window.products = <%=raw Product.limit(10).to_json %>;
<% end %>

您不能在公共js文件中评估@ map.title,因为该文件是在控制器稍后调用之前生成并提供一次,然后进行缓存。

但是,您可以在HTML页面中使用javascript。 可以使用<%= @ map.title%>提供的常量值生成javascript。

将javascript放在一个部分中,然后将其呈现在页面中的标记中。

我见过美国银行在他们的网站上这样做。 它们在页面上的javascript数组中生成所有帐户事务。

不要忘记使用escape_javascript()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM