【问题标题】:Ruby slim inline ifRuby slim inline if
【发布时间】:2016-10-04 11:02:34
【问题描述】:

我正在尝试使用 Ruby Slim 进行内联 if

下面是我的例子……

- if @droppable
  .panel data-draggable="true"
    span More content here
- else
  .panel
    span More content here

在这两种情况下,唯一的区别是顶级.panel 元素上存在data-draggable 属性。 .panel 的内容是相同的,所以我想完成如下操作:

.panel (@droppable ? data-draggable="true")
  span More content here

有没有办法在 Slim 中实现这一点?

【问题讨论】:

  • 第一个例子是正确的。你可能对 @droppable 有问题。尝试在页面中打印并检查其值。
  • “不起作用”是一个不恰当的错误报告。请提供准确的错误消息和堆栈跟踪。
  • 对不起我的“不起作用”,我的意思是“span hello”只有在@droppable 不正确时才可见。我不知道如何为这两种情况显示 span hello。

标签: ruby conditional-statements inline slim-lang


【解决方案1】:

这里不需要if,三元运算符需要三个操作数,而不是两个。

Slim 和 HAML 都旨在省略具有 nil/false 值的属性,故意让您使用 && 运算符将真/假值转换为具有特定值的属性的存在 ,或不存在:

在苗条中:

.panel data-draggable=(@droppable && "true")
  span Hello

在 HAML 中:

.panel{data: {draggable: @droppable && "true"}}
  %span Hello

在这两种情况下,如果@droppable为真值,则添加data-draggable="true",否则将省略该属性。

【讨论】:

  • 这绝对应该是公认的答案。动态标签是方式矫枉过正。
【解决方案2】:

使用dynamic tags:

ruby:
  def panel!
    {tag: 'panel'}.tap do |tag|
      tag[:"data-draggable"] = true if @droppable
    end
  end

*panel!
  span hello

【讨论】:

  • 实现一个简单的可选属性有点矫枉过正
  • 是的,但是“给一个人一条鱼,你就可以喂他一天;教一个人钓鱼,你就可以养他一辈子。”
【解决方案3】:

你不能有 "inline if" ,但你可以通过 slim in line html support 获得你想要的行为 这样做:

<div class="cool_class"       
  - if conditional_is_met
    | data="must_be_added"
    | special_data="#{@my_data.to_json}" 
  |          
</div>

考虑到在 html 标记内部仍然遵循 slim 标识。 最后的| 对关闭 if 很重要。

【讨论】:

    猜你喜欢
    • 2022-12-27
    • 1970-01-01
    • 2017-07-08
    • 2023-01-09
    • 1970-01-01
    • 2013-10-13
    • 2020-06-15
    • 2017-01-26
    • 1970-01-01
    相关资源
    最近更新 更多