0

在我的资产中,我有一个名为 的文件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#show

显示…/app/views/maps/show.html.erb第 1 行提出的位置:

nil 的未定义方法“标题”:NilClass(在…/app/assets/javascripts/maps.js.erb

  • 为什么@map在文件中不可用js.erb
  • 我还能如何访问控制器中定义的这个实例变量?
4

3 回答 3

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 %>
于 2012-04-12T20:30:38.527 回答
1

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

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

将 javascript 放在部分中,并将其呈现在页面中的标记中。

我在他们的网站上看到美国银行这样做。他们在页面上的 javascript 数组中生成所有帐户交易。

于 2012-04-12T21:15:12.790 回答
0

不要忘记使用escape_javascript().

于 2012-04-12T21:32:26.393 回答