我有一个yml文件,我需要在脚本中的application.js文件中使用这些键。我无法从脚本中访问它。请帮我。我在初始化程序中有以下几行
APP_CONFIG = YAML.load_file("#{Rails.root}/config/filename.yml")[Rails.env]
我的yml文件中有以下键
development:
key1: 782364764527225794828437
key2: sdjfbjs7e834284383984729
key3: 73465365egfrf36462874727
我以
的身份访问application.js文件中的键APP_CONFIG['key1']
但似乎什么也没带。但是当我在视图体中打印相同的东西时
<%= APP_CONFIG['key1'] %>
然后它返回key1的值。
我该怎么做才能访问application.js文件中的值。它也不适用于视图本身的脚本体。
答案 0 :(得分:4)
您无法在Javascript文件中执行ruby命令
您需要找出一些其他方法来加载application.js
中的值像在app/views/layouts/application.html.erb
中将它们初始化为全局变量
<script>
var key = '<%= APP_CONFIG['key1'] %>';
</script>
并在任何Javscript文件中使用它
window.onload=function(){ alert(key);};
答案 1 :(得分:1)
您无法直接从JS文件访问您的yml文件内容。你能做的是 在您的视图页面上将这些键分配给js变量,然后您可以使用它来进行JS工作
<script>
var appConfigKeys = “<%= j APP_CONFIG.to_json.html_safe %>”;
console.log(appConfigKeys);
</script>
如果您希望它在其他JS文件中可用,那么您需要获取全局变量的帮助。
<script>
appConfigKeys = “<%= j APP_CONFIG.to_json.html_safe %>”;
console.log(appConfigKeys);
</script>
以上解决方案将为您提供所有密钥作为javascript哈希 如果只需要第一个键,则可以将单个键分配给JS变量。
<script>
appConfigKey = “<%= APP_CONFIG['key1'] %>”;
console.log(appConfigKey);
</script>
答案 2 :(得分:0)
我来到这个问题是因为我需要从 JS 访问我的 Rails 语言环境 YAML,更具体地说是存储在那里的月数组。我的解决方案是使用 ERB 所需的值创建一些 HTML 并在父 div 上设置 display: none
(此处使用引导程序的 d-none
类完成)。
在语言环境 YAML 中:
en:
date:
month_names: [~, January, February, March, April, May, June, July, August, September, October, November, December]
在视图中:
<ul class="d-none" id="months">
<%= I18n.t('date.month_names').each do |month_name| %>
<% if month_name.present? %>
<li><%= month_name %></li>
<% end %>
<% end %>
</ul>
在JS文件中:
const months = document.getElementById('months');