2012-02-16 80 views
1

我想将这个Coffee脚本代码包含在我的application.html.haml的头文件中,但我不知道将它放在哪里或如何包含ruby对象。Rails在视图中渲染Javascript文件并包含Ruby变量

问题1.我该如何渲染和存在于另一个文件中的Javascript .js或Coffeescript .coffee? (我在哪里把文件放在共享文件夹中的资产中?)

问题2.你如何混合ruby中的变量(例如全局变量ENV ['APP_ID']),请参阅下面的代码:

window.fbAsyncInit = -> 
    FB.init 
    appId: "#{ENV['APP_ID']}" 
    status: true 
    cookie: true 
    oauth: true 
    xfbml: true 

((d) -> 
    js = undefined 
    id = "facebook-jssdk" 
    return if d.getElementById(id) 
    js = d.createElement("script") 
    js.id = id 
    js.async = true 
    js.src = "//connect.facebook.net/en_US/all.js" 
    d.getElementsByTagName("head")[0].appendChild js 
) document 
$ -> 
    $("a").click (e) -> 
    e.preventDefault() 
    FB.login ((response) -> 
     $.get "/auth/facebook/callback" if response.authResponse 
    ), 
     scope: "#{SCOPE}" 

回答

2

Q1。我不会推荐在其他javascript中渲染内联javascript的部分内容,但是如果您正在渲染模板,那么您应该将它们保留在应用/资产/模板中。如果您使用的是Rails Asset Pipeline,则可以添加其他扩展以通过附加解析器来放置该文件。所以添加一个ERB扩展来在JS中渲染ruby变量。例如。

#my_file.js.coffee.erb 
window.fbAsyncInit = -> 
    FB.init 
    appId: "<%= ENV['APP_ID'] %>" 
    status: true 
...