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