尝试在 js.erb 文件中使用控制器变量时抛出 NoMethod错误
NoMethodError thrown when trying to use controller variables in js.erb file
在我的资产中,我有一个名为maps.js.erb
的文件,基本上只有以下(调试)内容:
alert("<%= @map.width %>");
这个JS文件是通过属于地图的show.html.erb
视图加载的。
<%= javascript_include_tag params[:controller] %>
<h1><%= @map.title %></h1>
…
HTML文件本身显示地图的标题,例如浏览到/maps/1/
时,因为@map
是在控制器中定义的。但是,一旦我包含JS文件,就会出现以下错误:
地图中的NoMethod错误#show
显示 #1 行升高
…/app/views/maps/show.html.erb
:nil:NilClass 的未定义方法 'title' (
…/app/assets/javascripts/maps.js.erb
)
- 为什么
@map
在js.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。 该 JavaScript 可以使用 <%= @map.title %> 提供的常量值生成。
将 javascript 放在部分,并将其呈现在页面的标签中。
我看到美国银行在他们的网站上这样做了。 它们在页面上的javascript数组中生成所有帐户事务。
不要忘记使用 escape_javascript()
.
相关文章:
- 为什么不't我的变量在我的控制器中填充后在我的视图中呈现
- angularjs:访问angular控制器中的jquery变量
- 如何将一个变量从一个控制器传递到合金中的另一个控制器
- 将方法从控制器注入到未使用右变量调用的指令
- $Scope变量在HTML中不更新,尽管在控制器中不断更新
- 试图将一个局部变量传递给我的ngAside控制器
- 共享变量和多个控制器AngularJS
- 在控制器之间传递变量的最佳方式
- 控制器无法访问Angular Service变量
- 如何从jQuery设置控制器或全局变量的属性
- 为什么我们将控制器变量设置为等于“0”;这个“;在角度上
- 将外部控制器的范围变量设置为角度
- 将Scope变量作为指针发送,并在控制器外部对其进行更改
- AngularJS:如何与其他控制器共享作用域函数和变量
- AngularJS更新控制器变量并再次渲染视图
- 作用域变量未从状态父控制器继承到子控制器
- 具有范围变量的控制器不工作
- AngularJS:如何在控制器之间传递变量
- 我可以将变量控制器函数传递给指令中的函数链接吗?
- 如何使用函数将值更改为作用域中的全局变量?(“控制器”)