我有一些Javascript,我需要分配一个ruby字符串。在这种情况下,我编写了一些需要登录用户电子邮件地址的javascript函数。我正在使用haml。
在我的应用程序布局文件(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}");
});
答案 0 :(得分: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正确,我不使用它所以我有点猜测语法。
答案 1 :(得分:1)
我假设application.js代码在一个函数内(即你需要引用当前用户的电子邮件地址)。如果是这样,那么为什么不“读取”用户看不到的容器标签中的数据/值?您的视图(即ERB / HAML / etc - 只是不是js)可以使用从模型中评估的适当值来编写此容器标记。
答案 2 :(得分:0)
您可以使用gon gem将变量从控制器传递到javascript。
相应地安装gem并进行设置,然后在控制器中调用gon.current_user_email = current_user.email
。
然后在gon.variable_name