如何以正确的方式创建由我的Rails应用程序变量初始化的全局js变量?

时间:2018-07-20 07:05:29

标签: javascript ruby-on-rails ruby-on-rails-5

在我的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

1 个答案:

答案 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元素访问数据。