簡體   English   中英

參數可以從Rails應用程序控制器傳遞到Javascript嗎?

[英]Can params be passed from the Rails Application Controller into Javascript?

我目前正在將單個對象(:category值)傳遞到Rails項目中的params中。

我很難理解-並且無法從文檔中確認-是應用程序控制器是否適用於應用程序中的所有文件 (包括我的javascript文件)還是僅用於控制我的視圖。

簡而言之,我的問題是:在Javascript中,是否可以像在視圖中一樣使用App Controller中的方法傳遞參數?

現在工作的是這里:我的application_controller.rb包含以下set_category方法:

 def set_category
    session[:category] = params[:category] if params[:category].present?
  end

在我看來,這使我可以將類別傳遞到可以在鏈接中指定的參數中。 這是我如何使用link_to幫助程序來工作的示例。

 <%= link_to "Play Game".html_safe, game_path(category: 'game'), class: "btn btn-primary btn-md" %>

太好了,因此類別“游戲”正在傳遞給參數,並且可以正常工作。

在加載有“游戲”參數的頁面上,將玩一個JavaScript游戲。 在游戲結束時,我希望能夠再次在鏈接中(在JS中)為參數設置類別。 現在,我正在使用靜態鏈接:

 Game.prototype.finish = function() {
   window.clearInterval(this.interval);
   this.container.html('Your score was ' + this.score + ' correct out of ' + (this.quizCurrent - 1) + ' questions.<br>
   <br>Now see if you won the <a href="/scoreboard">Scoreboard</a><br>');
  }

如果我將此鏈接保留在Javascript文件中,是否可以通過添加類別來使其動態化,就像我對link_to方法所做的那樣? 將其更改為以下內容不會觸發該方法:

  <a href="/scoreboard(category: 'game')">Scoreboard</a>

我接受了較早的答案,並且我相信所有三種方法都可以解決問題。 我想詳細說明我的工作,以防有人遇到這個問題。

選擇策略3,我在html視圖中添加了一個div以隱藏動態內容:

<!-- hide dynamic content --> 
<%= content_tag :div, class: "temp_information", data: {temp:    game_path(category: "game1")} do %>
 <% end %>

然后,在我的javascript文件中,定義了臨時數據,以便可以在我的鏈接中(也就是javascript文件中)調用它(在本例中為params)。

 var para = $('.temp_information').data('temp');
  console.log(para); 

控制台確認javascript正在從html文件中提取類別參數,我們很好。 我的最后一步是將變量放在表達式中:

 this.container.html('Your score was ' + this.score + ' correct out of ' + (this.quizCurrent - 1) + ' questions.<br>
 <br>Now see if you were winner in the' + '<a style= href="' + para + '"> Scoreboard</a>' + ' for this game.');

而且有效。

如果我理解正確,那么您希望在運行時將一些信息從ruby腳本傳遞到javascript。 您有兩個選擇:a)在js中解析您的參數,或b)通過編寫js代碼將某些內容傳遞給javascript。 讓我們看看這兩個選項。

第一個實際上很容易。 如果您有/scoreboard?category=games ,則可以使用location.search查看。 有關如何解析數據的更多信息,請參見如何解析Java語言中的URL查詢參數? 我不會詳細介紹,但是使用URL傳遞此數據非常容易。

第二種選擇有些棘手,主要是因為有很多方法可以做到。 您可以通過實際編寫JavaScript將數據傳遞給window對象。 因此,例如:

<head>
...
<script>
window.categoryId = '<%= @category.id %>';
</script>
</head>
...

如果需要傳遞大量數據,還可以將大量數據轉換為JSON。 您還可以使用HTML中的data屬性傳遞數據。 這是Rails中的示例:

<%= content_tag :div, data: {data: @data} ... %>

您可以閱讀有關此Rails的更多信息:將數據傳遞給javascript

我的建議是保持簡單並使用第一個。 如果您的數據只是id或簡單查詢,則可以執行此操作。 如果您的數據很復雜,那么您將不得不使用后一種選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM