在我的资产,我有一个名为maps.js.erb
,基本上只有以下(调试)内容:
alert("<%= @map.width %>");
这个JS文件是通过加载show.html.erb
属于地图视图。
<%= javascript_include_tag params[:controller] %>
<h1><%= @map.title %></h1>
…
HTML文件本身示出了地图的标题,例如,浏览时/maps/1/
,由于@map
在控制器定义。 但是,只要我包括JS文件,我得到以下错误:
NoMethodError在地图#秀
显示…/app/views/maps/show.html.erb
其中线#1提出:
未定义的方法'标题'近亲:NilClass(在…/app/assets/javascripts/maps.js.erb
)
- 为什么
@map
没有可用的js.erb
文件? - 我还能如何访问我的控制器定义这个实例变量?
瑞安贝茨做了有关该主题的一个截屏正确的 - 你可能想看看:
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 %>
你不能有@ map.title在一个共同的js文件进行评估,因为生成的文件,并担任过一次,后来才控制器invokations,然后缓存。
但是,你可以在你的HTML页面的JavaScript。 的JavaScript可以通过<%= @ map.title%>提供的恒定值来生成。
把JavaScript的一个部分,并呈现在你的页面的标签。
我已经看到了美国银行在其网站上这样做。 它们产生在页面上的JavaScript数组中的所有账户交易。
不要忘记使用escape_javascript()
文章来源: NoMethodError thrown when trying to use controller variables in js.erb file