在我的资产中,我有一个名为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
显示第{1行引发的
…/app/views/maps/show.html.erb
:nil的未定义方法'title':NilClass (在
…/app/assets/javascripts/maps.js.erb
)
@map
文件中没有js.erb
? 答案 0 :(得分:1)
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 %>
答案 1 :(得分:1)
您不能在公共js文件中评估@ map.title,因为该文件是在控制器稍后调用之前生成并提供一次,然后缓存。
但是,您可以在HTML页面中使用javascript。可以使用&lt;%= @ map.title%&gt;提供的常量值生成javascript。
将javascript放在部分内容中,然后将其呈现在页面中的标记中。
我见过美国银行在他们的网站上这样做。它们在页面上的javascript数组中生成所有帐户事务。
答案 2 :(得分:0)
不要忘记使用escape_javascript()
。