繁体   English   中英

在Javascript / jQuery中访问Rails全局常量

[英]Access Rails global constant in Javascript / jQuery

我的设置:Rails 3.0.9,Ruby 1.9.2,jQuery 1.6.2

滑轨

constants.rb (initializer file)

DEFAULT_REPLY = "Add a reply..."

滑轨

index.html.erb 

<%= javascript_include_tag 'reply' %>
...(rest of view code)...

reply.js

$(function() {
 var default_reply = <%= h DEFAULT_REPLY -%>;
 ...(rest of jQuery code)...
});

这将引发错误Uncaught SyntaxError:Unexpected token %= ,我试图将其括在诸如var default_reply = '<%= h DEFAULT_REPLY -%>'引号中,并按原样输出值,这意味着default_value的值为<%= h DEFAULT_REPLY -%>'显然不是我想要的。 我究竟做错了什么?

编辑鉴于反馈,我已经重新考虑,现在使用局部变量和jQuery在页面加载时从textarea中提取值。

您需要将.erb添加到.js文件的末尾,并在字符串周围添加引号。

您的javascript文件的名称应为reply.js.erb。

当前,您的.js文件未通过Rails运行,而是以静态方式提供。 这就是为什么将引号括在字符串中时会输出字符串“ <%= h DEFAULT_REPLY%>”而不是正确的文本的原因。

我强烈建议您不要使用这种方法,但是我认为您在这里混淆了两件事。

假设reply.js位于public/javascripts/reply.js ,这是服务器提供的静态JS文件。 您不能在此处放置任何动态(“服务器端”)代码,因为文件不会以任何方式进行评估,而只是静态返回。

如果要在文件中使用全局JS变量,则需要在layout文件app/views/layouts/application.html.erb或操作文件( index.html.erbshow.html.erb进行分配show.html.erb等)。

在返回任何ERB文件之前都会对其进行评估,因此您可以将

<script type='text/javascript'>
  $(function() {
   var default_reply = "<%= escape_javascript DEFAULT_REPLY %>";
  });
</script>

高于layout文件的<%= yield %>语句。

再次,我强烈建议您不要使用这种方法,但是如果您要这么做,我认为这可以解决。

听起来您的视图模板命名不正确,它以.html.erb结尾吗? 如果不是,它将不会评估您粘贴的ERB片段。

解决此问题后,您可以使用以下ERB代码嵌入所需内容:

$(function() {
 var default_reply = "<%= h DEFAULT_REPLY -%>";
 ...
});

如果它是Rails 3 App,为什么要使用该语法? 尝试:

var default_reply = <%= DEFAULT_REPLY %>;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM