在Rails 3.1中,无法使用诸如<%= @ foo%>之类的语法访问资产js.erb或coffee.erb文件中的控制器实例变量,其中@foo在控制器中设置.那么问题是将控制器变量传递给CoffeeScript或JavaScript资产的最佳方法是什么.
这个问题在论坛上有多种复杂形式的问题,但我再次提出这个问题的意思是要有一个所有建议聚集在一起的地方,并且所提供的代码简单易读.另请注意,我特指的是资产,而不是查看响应文件.
controller ruby-on-rails erb instance-variables coffeescript
我想在我的.coffee文件中使用一些erb,如下例所示
myLatlng: new google.maps.LatLng(<%=@location.latitude %>, <%=@location.longitude %>)
Run Code Online (Sandbox Code Playgroud)
我改名locations.js.coffee为locations.erb.coffee
但我仍然得到以下错误
Error compiling asset application.js:
ExecJS::ProgramError: Error: Parse error on line 4: Unexpected 'COMPARE'
(in /Users/denisjacquemin/Documents/code/projects/geolog/app/assets/javascripts/locations.erb.coffee)
Served asset /application.js - 500 Internal Server Error
Run Code Online (Sandbox Code Playgroud) 在CSS文件中,您可以使用以下命令获取图像资产的正确名称(带指纹):
background-image: url(image-url("rails.png"))
Run Code Online (Sandbox Code Playgroud)
但是你如何从JavaScript文件中做同样的事情呢?
我是Rails的新手,在控制器中我有:
class PagesController < ApplicationController
def home
@temp = "Hello"
end
end
Run Code Online (Sandbox Code Playgroud)
我已经读过,我必须将javascript代码放在application.js中(告诉我,如果是),我有:
window.onload=function(){alert("<%= j @temp %>")}
Run Code Online (Sandbox Code Playgroud)
显然警告打印字符串"<%= j @temp%>"如何将变量@temp传递给javascript,以便警报可以打印Hello?
谢谢
我想知道在rails视图中将变量传递给JavaScript函数的最佳实践是什么.现在我做的事情如下:
<% content_for :javascript do %>
<script type="text/javascript">
Event.observe(window, 'load', function(){
js_function(<%= @ruby_array.to_json %>, <%= @ruby_var %>); )}
</script>
<% end %>
Run Code Online (Sandbox Code Playgroud)
这是正确的方法吗?
在我的rails 3.1.3应用程序中,我想在我的javascript文件中插入一些ERB代码但是由于某种原因它没有被解析:
# app/assets/javascripts/application.js
//= require_tree ./shared
# app/assets/javascripts/shared/shared.js.erb
MM.loading = '<img src="<%= asset_path("icons/ajax-loader.gif") >">';
Run Code Online (Sandbox Code Playgroud)
获取如下所示/application.js:
MM.loading = '<img src=" asset_path("icons/ajax-loader.gif") >">';
Run Code Online (Sandbox Code Playgroud)
我在导轨指南中看不到任何额外的步骤 - 有什么我想念的吗?顺便说一下,我正在使用haml作为视图文件,并且还尝试了上面的内容.js.haml,包含在中#{...}.