[英]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.erb
, show.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.