我的设置: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中提取值。
答案 0 :(得分:2)
您需要将.erb添加到.js文件的末尾,并在字符串周围添加引号。
您的javascript文件的名称应为reply.js.erb。
目前,您的.js文件未通过rails运行,并且正在静态提供。这就是为什么当你在字符串周围加上引号时,它会输出字符串'&lt;%= h DEFAULT_REPLY%&gt;'而不是正确的文字。
答案 1 :(得分:2)
我强烈反对这种做法,但我认为你在这里混淆了两件事。
假设reply.js
位于public/javascripts/reply.js
,这是一个由服务器提供的静态JS文件。您不能在此处放置任何动态(“服务器端”)代码,因为文件未以任何方式进行评估,只是静态传回。
如果您希望在文件中使用全局JS变量,则需要在layout
文件app/views/layouts/application.html.erb
或操作文件(index.html.erb
,{show.html.erb
中进行分配。 {1}}等。)
在返回之前评估任何ERB
文件,因此您可以放置
<script type='text/javascript'>
$(function() {
var default_reply = "<%= escape_javascript DEFAULT_REPLY %>";
});
</script>
高于<%= yield %>
文件的layout
声明。
同样,我强烈建议反对这种做法,但如果这就是你需要的原因,我想这会解决它。
答案 2 :(得分:1)
听起来你错误地命名了你的视图模板,它是以.html.erb结尾吗?如果没有,它将不会评估您粘贴的ERB片段。
修复后,您可以使用以下ERB代码嵌入您想要的内容:
$(function() {
var default_reply = "<%= h DEFAULT_REPLY -%>";
...
});
答案 3 :(得分:-2)
如果是rails 3 App你为什么要使用这种语法?尝试:
var default_reply = <%= DEFAULT_REPLY %>;