Javascript/jQuery中的Access Rails全局常量

Javascript/jQuery中的Access Rails全局常量,javascript,jquery,ruby-on-rails,ruby-on-rails-3,Javascript,Jquery,Ruby On Rails,Ruby On Rails 3,我的设置:Rails 3.0.9、Ruby 1.9.2、jQuery 1.6.2 轨道 轨道 index.html.erb …(视图代码的其余部分)。。。 reply.js $(函数(){ var default_reply=; …(jQuery代码的其余部分)。。。 }); 这会抛出一个错误Uncaught SyntaxError:Unexpected token%=,我试图将它括在var default\u reply='这样的引号中,它会按原样输出值,这意味着default\u值的值显然

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

轨道

轨道

index.html.erb
…(视图代码的其余部分)。。。
reply.js
$(函数(){
var default_reply=;
…(jQuery代码的其余部分)。。。
});
这会抛出一个错误
Uncaught SyntaxError:Unexpected token%=
,我试图将它括在
var default\u reply='
这样的引号中,它会按原样输出值,这意味着
default\u值
的值显然不是我想要的值。我做错了什么

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

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

修复后,您可以使用以下ERB代码嵌入所需内容:

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

如果是rails 3应用程序,为什么要使用这种语法?尝试:


var default_reply=

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

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


目前,您的.js文件不是通过rails运行的,而是静态提供的。这就是为什么在字符串周围加引号时,它会输出字符串“”,而不是正确的文本。

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

假设
reply.js
位于
public/javascripts/reply.js
中,这是一个由服务器提供的静态js文件。您不能将任何动态(“服务器端”)代码放在这里,因为该文件没有以任何方式进行计算,只是以静态方式传回

如果希望在文件中使用全局JS变量,则需要在
布局
文件
app/views/layouts/application.html.erb
或操作文件(
index.html.erb
show.html.erb
等)中分配它

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

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

$(函数(){
var default_reply=“”;
});
在您的
布局
文件的
语句上方


再一次,我强烈地反对这种方法,但如果这就是你需要的原因,我想这会解决它。

Hmm,全局常量显然不在视图模板中,让我试试看它是如何工作的。我问你,你粘贴这个代码片段的模板文件名是什么(jQuery块)。哦,文件名是
index.html.erb
,其中包含jQuery JS文件,因此它的设置是正确的,但我仍然存在如上所述的问题。您可能需要发布整个模板,然后才能找到出现语法错误的原因。这太多的代码无法发布,并且无法在上下文之外特别理解。我能说的是,剩下的代码工作得很好,直到我添加了一行抛出错误的代码。仅用于文本消息的全局常量?不,不仅仅是用于文本消息。全局常量还用于几个视图(在多个位置),我在问题中并没有说明这些视图。我不想把我的问题复杂化。你介意删除你的否决票吗?var default_reply=;“是否会抛出相同的错误?还有,这个错误是rails抛出的还是javascript抛出的?@spike,它抛出相同的JS errorFair,我想这不是一个好的实践。我现在使用一个局部变量和jQuery在页面加载时从textarea中提取值。谢谢,Scott,你的答案是第一个对我有意义的答案,尽管我已经放弃了使用全局常量。不,请参阅你的:
var default\u reply=
看,有没有
-
和/或
h
,它抛出了同样的错误。看看其他的评论,为什么会这样。但这是Rails2.x中使用的旧sintax的erb。在所有情况下,问题都是其他的
$(function() {
 var default_reply = "<%= h DEFAULT_REPLY -%>";
 ...
});
<script type='text/javascript'>
  $(function() {
   var default_reply = "<%= escape_javascript DEFAULT_REPLY %>";
  });
</script>