ruby rails动态css类

Posted

技术标签:

【中文标题】ruby rails动态css类【英文标题】:ruby rails dynamic css clas-s- 【发布时间】:2021-10-28 21:03:02 【问题描述】:

我有一个页面,我在其中调用了我的共享组件

<%= render 'headers', positionRight: true, ...  %>

我想将positionRight 参数设为可选参数。在我的共享组件中,我无法让 css 工作

<section class=<%= (defined? positionRight && positionRight) ? "custom-css-class" : "" %>>

看起来总是落入空的css类

【问题讨论】:

【参考方案1】:

我希望它总是给你custom-css-class(defined? positionRight &amp;&amp; positionRight) 始终评估为 'expression',无论 positionRight 具有什么值(如果有)。请记住,defined? 不是方法调用,它是一个关键字,而您正在给它一个表达式。

你最好在你的 ERB 文件的顶部说这样的话:

<%
  if !defined? positionRight
    positionRight = false
  end
%>

这样positionRight 将始终有一个值,然后

<section class=<%= positionRight ? 'custom-css-class' : '' %>>

当你想使用时。

【讨论】:

【参考方案2】:

首先,defined? something 将返回某物的类型,在这种情况下,某物是positionRight &amp;&amp; positionRight,这意味着这是一个“表达式”,因此您的逻辑将落入“custom-css-class”而不是空 css说,因为"expression" ? 总是会陷入真实情况。

其次,你的逻辑只有2种情况:true或其余(false,nil),所以无论你设置positionRight(true,false)还是不设置,下面的代码应该没问题:

positionRight ? "custom-css-class" : ""

最后但并非最不重要的一点是,如果您想要超过 3 种情况:positionRight 已定义:true 或 false 甚至 nil,而 positionRight 未定义,那么您现在可以使用 defined?,如下代码:

defined?(positionRight) ? (positionRight ? "css-align-right" : "css-align-left") : ""

【讨论】:

【参考方案3】:

以上场景可以通过以下方式处理:

<% positionRight||= false %>
<section class=<%= positionRight ? "custom-css-class" : "" %>>

然后

<%= render 'headers', positionRight: true, ...  %>
OR
<%= render 'headers', ...  %>

【讨论】:

【参考方案4】:

在您的视图中将其添加为文件的第一行:

<% positionRight ||= false %>
<% section_class = positionRight ? 'custom-css-class' : '' %>

现在您可以在文件中的任何位置使用您的section_class

<section class='<%= section_class %>' >...

请注意section 元素中类的定义。您必须使用单引号,否则如果您的类名包含空格,结果 html 元素将无效。

同时,请注意您的变量 positionRight 不是以 ruby​​ 样式命名的(在 ruby​​ 中,他们通常使用蛇形盒 => position_right 会更具语义性)

【讨论】:

以上是关于ruby rails动态css类的主要内容,如果未能解决你的问题,请参考以下文章

如何在rails上的ruby中生成动态URL?

Ruby on Rails 使用视图助手中的变量在视图中动态生成字段名称

如何使用 Actionmailer/Ruby on Rails 发送具有多个动态 smtp 的电子邮件

在 ruby​​ on rails 动态 id 不能用于两个词,但可以完美地用于一个词——使用引导程序崩溃

在 Rails 中动态构建查询

使用引导进度条的 Rails 动态数据进度条