【问题标题】:Conditionally setting CSS style from ruby controller从 ruby​​ 控制器有条件地设置 CSS 样式
【发布时间】:2012-03-27 15:46:04
【问题描述】:

我正在尝试动态更改(如果它被点击)一个普通的表头(它是一个链接)到另一个定义的 CSS 类“th.hilite”。此链接仅对该列进行排序,并且每次用户对列表进行排序时,标题都应突出显示。

应该更改相关类的视图,如下所示:

%table#mytable
  %thead
    %tr
      %th= link_to 'Title', mytable_path(:sort => 'title'), :id => 'title_header'

我的问题很简单:如果单击标题,我如何以及在何处将类动态设置为 %th.hilite?

【问题讨论】:

  • 您必须在 Javascript 中执行此操作,而不是在 ruby​​ 中。
  • 您不必也不应该使用 JavaScript 来执行此操作。除此之外,您应该自己完成 SaaS 作业 #2。注意:给出的答案是正确的。
  • 您不应在此处直接发布来自 saas-class.org 作业 2 作业的问题。您应该问如何做某事.. 但不是为了您问题的确切答案。
  • 最重要的是,您不应该发布上面直接显示如何回答部分问题的代码。它只是不良行为。
  • 当我在haml中搜索有关条件渲染的信息时,这是谷歌上的第一个链接,这非常令人失望。每个报名参加该课程的人都同意荣誉守则,可惜有些人不再有任何个人荣誉。

标签: css ruby-on-rails ruby haml


【解决方案1】:

您应该使用 JavaScript 来执行此操作。我认为您最好使用 jQuery 而不是纯 JavaScript。下面是一些例子

http://api.jquery.com/click/

http://api.jquery.com/css/

【讨论】:

  • 这不需要 JavaScript 和 jQuery。
【解决方案2】:

您可以直接从视图中绑定它:

%th{:class => ("hilite" if @sort == "title")}= link_to 'Movie Title'...

但是,您还必须在控制器中声明 @sort 实例变量,并根据您所在的列将其设置为 titlerelease排序。 (即@sort = params[:sort]

【讨论】:

  • 其实不用声明实例变量,直接使用params[:sort]
【解决方案3】:

顺便说一句,只要您的参数值与列名匹配 - 无需对每一个进行编码

def index
    @by=params[:by]
    @movies = Movie.order(params[:by]).all
  end

【讨论】:

    【解决方案4】:

    不需要 Javascript 或 jquery..

    以下 HAML 将起作用

    %th{:class=>('title' == @sortby)?'hilite':""}= link_to  'Movie Title', movies_path(:sort => 'title'), :id => 'title_header'
    

    【讨论】:

      【解决方案5】:

      如果您能找到解决方法,请注意不要将逻辑(甚至是条件)放入您的视图中。为了避免这种常见错误,您需要充分利用参数和会话哈希,并在控制器中设置适当的变量

      # In your view
      %th{:class => @title_header}= link_to 'Title', my_path(:sort => 'title'), :id => 'title_header'
      
      # In your controller
      sort = params[:sort] || session[:sort]
      if sort == 'title'
        ordering = {:order => :title}
      end
      

      【讨论】:

      • 如果您想知道 ||session[:sort] 的原因,那是因为您可能会单击可排序列以外的其他内容,在这种情况下,您不希望排序因为您的参数而被撤消哈希已过期。您还需要控制器中的一些逻辑,例如“if params[:sort] != session[:sort] then session[:sort] = sort”类型的东西
      • 我试图理解这个答案。我可以在文档中的哪个位置阅读“什么?”了解 title_header 如何为每个 th 设置不同的值?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-02
      • 2013-07-31
      • 1970-01-01
      • 2015-05-02
      • 2012-02-16
      • 2020-11-02
      相关资源
      最近更新 更多