我目前正在将一个单独的对象(a:类别值)传递给我的Rails项目中的params。
我很难理解 - 并且无法从文档中确认 - 应用程序控制器是否适用于应用程序中的所有文件(包括我的javascript文件) )或者如果那只能控制我的观点。
简而言之,我的问题是:在我的Javascript中,我可以使用我的App Controller中的方法传递params,就像我在视图中一样吗?
以下是现在的工作原理:我的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" %>
太棒了,所以类别“游戏”正在被传递给params,它起作用了。
在加载“游戏”参数的页面上,播放一个javascript游戏。在游戏结束时,我希望能够在链接中(在JS中)再次为param设置一个类别。现在,我正在使用静态链接:
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>
答案 0 :(得分:1)
我接受了之前的回答,我相信这三种方法都可以解决问题。我想详细说明我做了什么,万一有人遇到这个问题。
选择策略#3,我在我的html视图中添加了一个div来隐藏动态内容:
<!-- hide dynamic content -->
<%= content_tag :div, class: "temp_information", data: {temp: game_path(category: "game1")} do %>
<% end %>
在我的javascript文件中,我然后定义了临时数据,因此我可以在我的链接中调用它(在本例中为params),该链接也在javascript文件中。
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.');
它有效。
答案 1 :(得分:0)
如果我理解正确,您希望在运行时将ruby脚本中的一些信息传递给javascript。你有两个选择:a)在js中解析你的参数,或者b)通过编写js代码将一些东西传递给javascript。我们来看两个选项。
第一个实际上非常简单。如果您有/scoreboard?category=games
,则可以使用location.search
查看此内容。有关如何解析数据的更多信息,请参见How do I parse a URL query parameters, in Javascript?。我不会详细介绍,但使用URL传递这些数据非常容易。
第二种选择有点棘手,主要是因为有很多方法可以做到这一点。您可以通过实际编写javascript将数据传递给window
对象。例如:
<head>
...
<script>
window.categoryId = '<%= @category.id %>';
</script>
</head>
...
如果您需要传递大量数据,还可以将大量数据转换为JSON。您还可以使用HTML中的data
属性传递数据。以下是Rails中的示例:
<%= content_tag :div, data: {data: @data} ... %>
您可以阅读有关此Rails: pass data to javascript的更多信息。
我的建议是保持简单并使用第一个。如果您的数据只是ID或简单查询,则可以执行此操作。如果您的数据很复杂,那么您将不得不使用后面的一些选项。