2011-09-05 43 views
4

我有一些Javascript需要分配一个ruby字符串。在这种情况下,我写了一些需要登录用户电子邮件地址的JavaScript函数。我正在使用haml。如何将ruby字符串传递给rails中的application.js文件

在我的应用程序布局文件(application.html.haml)我能做到这一点,它会工作:

%script{:type => "text/javascript", :charset => "utf-8"} 
    $(document).ready(function() { 
    alert('hello'+ "#{User.find(current_user).email}"); 
    }); 

,但我有一个专门的js文件我的应用程序。 application.js文件

如何从我的视图中将登录用户的电子邮件地址传递给application.js文件?

以下application.js不起作用。

$(document).ready(function() { 
    alert('hello' + "#{User.find(current_user).email}"); 
}); 
+2

顺便说一句,我建议移动查询即'User.find(CURRENT_USER)'出的通过设置结果o来查看并进入控制器f查询“@ current_user” - 保持代码基础更多MVC_,并且从长远来看,更具可读性和可管理性。 – cmpolis

回答

1

,你可以设置在一个全局JavaScript变量用户信息:

%script{:type => "text/javascript", :charset => "utf-8"} 
    var user = { email: "#{escape_javascript User.find(current_user).email}" } 
    $(document).ready(function() { 
    alert('hello ' + user.email); 
    }); 

,然后关在application.js

$(document).ready(function() { 
    alert('hello ' + user.email); 
}); 

和你的页面应该说 “你好” 的两倍。

此外,不会current_user通常已经是一个用户实例?如果是,那么current_user.email应该是足够的,如果没有,那么设置,然后你想在你的控制器中设置@user = ...,然后在你的视图中使用@user.email

我希望我得到了HAML的权利,我不使用它,所以我有点在语法猜测。

+0

这将工作。谢谢。 – Mike

1

我假设application.js代码是在一个函数内(即您需要引用当前用户的电子邮件地址)。如果是这样,那么为什么不从用户不可见的容器标签中读取数据/值呢?你的看法(这是ERB/HAML /等 - 只是没有JS - 那么可以这样写集装箱电子标签与模型评估适当的值

0

您可以使用gon宝石从控制器变量传递给JavaScript

相应安装宝石和安装,然后调用gon.current_user_email = current_user.email在控制器中。

然后访问该串以JavaScript等gon.variable_name

相关问题