【问题标题】:pass a parameter from a views to a javascript将参数从视图传递到 javascript
【发布时间】:2013-01-30 12:33:18
【问题描述】:

我的main_controller.rb 中有下一个变量:

def create:
   @token = "24vgd32"
end

在我的views/create.erb 中,我写道:

<%= javascript_tag do %>
   window.my_token = '<%= j @token %>';
<% end %>

通过这种方式,我可以在此页面引用的任何 JavaScript 文件中使用此变量。

但是如何在我的application.js 中使用它?

这是我的application.js

$(document).ready(function(){
  licensario.getLicense({
    wizardToken: my_token
  });
});

任何帮助表示赞赏!

【问题讨论】:

  • 您可以将此值放在隐藏字段中,并在 javascript 中使用该字段的值。
  • 我该怎么做? window.my_token = ''; ?接下来呢?

标签: javascript ruby-on-rails parameter-passing


【解决方案1】:

在你的 create.html.erb 中使用这个

<%= hidden_field_tag :my_token, @token, :id => 'some_field_id' %>

some_field_idmy_token 替换为所需的名称。

在您的 javascript 文件中

$(document).ready(function(){
  token = $('#some_field_id').val();
  //use your token for any other means.
});

【讨论】:

    【解决方案2】:

    我看到了 3 种方式:

    • 你可以在你的js文件中使用erb,命名为application.js.erb。但是,您要传递的数据必须在编译文件时可用,因此这可能不是您想要做的;
    • 您可以向服务器发出 XHR 请求以获取所需的值;
    • 您可以将值嵌入到视图的 dom 中。有些人会建议使用隐藏字段,我更倾向于使用数据属性。例如,&lt;body data-my-value="32"&gt;...。您可以通过 $('body').data('my-value') 在您的 js 中检索它。加载 dom 后小心调用它。

    我倾向于使用后者。

    【讨论】:

      【解决方案3】:

      window.my_token 使my_token 成为全局范围内的变量;一旦它被定义,它application.js可用,就像my_token一样简单。

      【讨论】:

      • $(document).ready( 将阻止封闭的代码运行,直到 DOM 加载。当您有一个包含 my_token 分配的内联 &lt;script&gt; 标记时,DOM 不会完成加载,直到 after my_token 有一个值。这意味着当 domready 函数最终运行时,my_token 将从视图中设置一个值。
      猜你喜欢
      • 1970-01-01
      • 2019-08-25
      • 2017-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多