【问题标题】:Accessing boolean value of a Ruby variable in `application.js`在 `application.js` 中访问 Ruby 变量的布尔值
【发布时间】:2012-02-10 18:03:51
【问题描述】:

我有一个div,当用户单击该链接时我将其隐藏,并在他们再次单击该链接时显示。我们希望当用户选择隐藏div 时将其折叠起来,因此我们在用户数据库中添加了一个布尔列hide_todo,并添加了一个方法来测试user_controller 中的值。隐藏是使用 jQuery 完成的,如果用户单击 Hide,我们希望将 hide_todo 的值更改为 true,当用户单击 Show 时更改为 false。如何访问 application.js 中的 Ruby 变量?

【问题讨论】:

  • 而不是用 jQuery 隐藏它,我会在渲染时使用 display:none 向该元素添加一个类,以防止内容闪烁。如果要保存 div 的状态,则需要使用 ajax。

标签: jquery ruby-on-rails erb


【解决方案1】:

js中访问ruby变量有3种方式:

A) 如果您使用带有资产管道的 rails 3.1+,您可以将 .erb 扩展名添加到文件中,如下所示:“application.js.erb”。现在你可以在 .js 我会说这是一种奇怪的方法,只有在特殊情况下才有意义。

B) 通常您会将所需的数据添加到 HTML 文档的 DOM 中,并从中检索数据。

例如,在您的 erb(或在 haml 中以类比方式)模板中执行以下操作:

<div id="collapsable" data-show="<%= model.hide.todo%>"> </div>

现在在 jQuery 中,您可以通过以下方式访问数据:

hide_todo = $("#collapsable").data("show");

C) 另一种方法是进行 ajax 调用,该调用将从 rails 应用程序返回数据。

在你的情况下,我推荐第二种方法。

【讨论】:

    【解决方案2】:

    我们最终使用了$.get('toggle_hide');,向控制器添加了一个方法来切换布尔值并将其映射到route.rb 中的资源。不过感谢您的建议!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-11
      • 1970-01-01
      • 1970-01-01
      • 2013-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多