3

我在 HAML 文档上有一些复选框,当我单击“刷新”按钮时,它们应该会更改显示的结果。这很好用,但是当页面重新加载时,被选中的框都再次被取消选中。

如何重新配置​​ HAML 以在页面视图中保持复选框选中状态?

= form_tag movies_path, :method => :get do
  Include:
  - @all_ratings.each do |rating|
    = rating
    = check_box_tag "ratings[#{rating}]", '1', true
  = submit_tag 'Refresh'

我还指定默认情况下应选中复选框,但在加载页面时不会选中它们...

4

3 回答 3

5

这将完成你想要的:

    = form_tag movies_path, :method => :get do
      Include:
      - @all_ratings.each do |rating|
        = rating
        = check_box_tag "ratings[#{rating}]", rating, if params[:ratings]; params[:ratings].include?(rating) end
    = submit_tag 'Refresh'

params[:ratings]实例在调用后仍然存在,因此您可以使用它来标记用户之前单击的框。

于 2012-10-20T23:15:27.807 回答
2

supernova32 非常接近。

唯一缺少的是基于您的最后一行“...指定默认情况下应选中复选框。”

您的代码应如下所示:

= check_box_tag "ratings[#{rating}]", 1, if params[:ratings]; params[:ratings].include?(rating) else true end

只需在参数不存在时包含 ELSE 语句(默认状态)。

于 2013-08-04T21:53:51.527 回答
0

我想这些复选框并不代表您的业务数据的某些持久状态(否则这将不适用),但它们实际上是一种“过滤器”或类似的临时配置视图。

在这种情况下,您应该只使用 AJAX 请求结果,而不是复选框。因此,您不必将它们存储在任何地方,因为它们不会消失。

于 2012-10-20T12:26:16.627 回答