在我的AppController中,我有一个变量@current_user。我想在我的所有js文件中创建一个全局命名空间变量,因此 当@current_user存在时,它会被初始化-用户已登录。另外,我希望将其命名为命名空间,以便如果碰巧具有相同名称的任何变量都不会被其他js变量重写或重写。
我该怎么做呢?
我认为我应该在顶部的基本布局中创建一个js变量:
<script>
var currentUser = {};
<% if @current_user %>
currentUser = {id: <%= @current_user.id %>, email: '<%= @current_user.email %>'};
<% end %>
</script>
这是可靠的方法吗?还是有更好的一个?
也-如何为我的js变量添加名称空间,使其变为:
MyApp.currentUser
?
答案 0 :(得分:1)
要在JavaScript和Rails代码之间更好地分离,可以在模板中定义一个DOM元素,该元素将包含要传递给JavaScript的数据。然后使用JavaScript获取数据:
在您的ERB模板中:
<%= content_tag :div, id:"js-user-data", data: {current_user_id: @current_user.id, current_user_email: @current_user.email} do %>
<% end %>
然后在您的JavaScript代码中:
var user_id = $("#js-user-data").data('current_user_id');
var user_email = $("#js-user-data").data('current_user_email');
那样,您将不会用ERB编写JavaScript,而只是从DOM元素访问数据。