javascript - 在 javascript 中使用 Controller 变量 (Ruby on Rails)

标签 javascript ruby-on-rails

我想在我的 JavaScript 中使用我的 Controller 变量。

因为这不能直接完成。我用的是gon gem 。 https://github.com/gazay/gon

有了这个,我所做的是在我的基本 Controller 的前过滤器中(它充当所有 Controller 的前过滤器)我做 gon.variable_name = value 在我的 js 文件中我使用 gon.variable_name。这对于整页重新加载效果很好。

但是该变量没有针对 ajax 请求进行更新。

举个例子:

在页面重新加载时,在我的 Controller 中我这样做

gon.variable_name = value1 

在我的js中,gon.variable_name给我value1

在我的 Controller 中发出 ajax 请求后,我这样做

gon.variable_name = value2 

在我的js中,我仍然只将gon.variable_name视为value1

有什么方法可以在 ajax 请求中更新 gon.variable_name 吗?

谢谢

最佳答案

您可以使用 watch: true 切换为gon :

#app/views/layouts/application.html.erb
<head>
  <%= include_gon(watch: true) %>

#app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
   def update_vars
      @value1 = User.count
      gon.watch.value1 = @users_count
   end
end

文档是这么说的。我不同意,但应该可行。 看起来像 ajax polling这是出了名的低效。

--

为了给您一些背景信息,您必须记住 gon基本上在你的layout中创建了一个小的javascript哈希值。 ,用 gon 填充它您在 Controller 中分配的变量:

<script>
   gon = {
      value1: "test",
      value2: "test"
   }
</script>

我们之前在这里使用过它:

enter image description here

这很重要的原因是因为 gon JS 变量在运行时调用——这意味着它保持静态,直到您重新加载页面。

解决这个问题的方法是动态重新加载 gon变量值(使用上面的 watch)通过 ajax 请求传递新值(如评论中推荐的 Sergio):

#app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
   def update
      respond_to do |format|
         format.json { render json: {value_2: "test"}.to_json %> 
      end 
   end
end

然后您就可以按如下方式使用它:

$.ajax({
   url: "/update",
   success: function(data) {
      var value2 = data.value2;
   }
});

关于javascript - 在 javascript 中使用 Controller 变量 (Ruby on Rails),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33430944/

相关文章:

javascript - 创建多个唯一的数组 jQuery

javascript - 将相同 Prop 和文本渲染到不同组件类型的 DRY React 方法

javascript - Extjs Rest 代理未将记录 ID 附加到 url

ruby-on-rails - 是否可以对 Ruby 操作进行字符串化/排队?

ruby-on-rails - 注册后立即为用户禁用自动登录

ruby-on-rails - 是否有任何工具可以将 MS SQL Server Reporting 与 Ruby 集成?

javascript - 在包含 HTML 元素的 JS var 中添加 HTML 代码

javascript - 这些额外参数如何与 map() 一起使用?

ruby-on-rails - Rails 中的 LocalJumpError(未给出 block )

javascript - Rails Assets 管道 - 仅将 jquery 添加到 head