繁体   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