簡體   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