我正在使用rails gon https://github.com/gazay/gon 从控制器中获取数据易于插入视图中 想要一个想法(只是一个例子):
def show
gon.alert = "this is an alert"
end
现在在我的show.haml:
中:javascript
alert(gon.alert)
现在我总是可以访问我在控制器操作中设置的gon值,但是如果你想从application.coffee访问gon值那么?
答案 0 :(得分:1)
如果要设置可以从每个控制器操作访问的gon值,并因此始终在application.coffee中可用,则可以在before_filter
中设置ApplicationController
。
class ApplicationController < ActionController::Base
protect_from_forgery
before_filter :set_gon_values
private
def set_gon_values
gon.current_user = 1 # or whatever you want to set here
end
end
这将在所有控制器上的每个操作之前运行set_gon_values
方法。这是有效的,因为所有控制器都继承自ApplicationController
。
答案 1 :(得分:1)
以下是第一个问题的答案:application.coffee
中没有什么特别之处,它无论如何都会编译成javascript。只需确保您在DOM Ready事件中访问gon.some_variable
:
$->
alert gon.alert
但是接下来你将面临另一个问题,如何确定哪个变量属于哪个控制器/动作。此外,如果您渲染另一个控制器/操作,gon.alert
将是未定义的。
因此,您需要在application.coffee
中设置条件,该条件仅在特定页面(控制器/操作)上执行。例如,您可以依赖于检测元素ID:
$->
if $('#pages_controller_show').length
alert gon.alert
当然,您的show.haml
必须包含id="pages_controller_show"
元素。