【问题标题】:Fixing redundancy in Slim if else statement修复 Slim if else 语句中的冗余
【发布时间】:2013-06-06 18:10:18
【问题描述】:

我的 slim 文件中有以下 if else 语句

- if x == 0
 div Some cool title here
- else
 div A different cool title goes here

这很好,但是我想在 div 中添加一些子标签

- if x == 0
 div Some cool title here
   div Ditto
- else
 div A different cool title goes here
   div Ditto

这违背了 DRY。无论如何我可以减少这个代码,所以我不必两次看到子标签?到目前为止,我所做的任何尝试都导致我让子标签存在于一个 div 中,而不是另一个,这不是我想要的,无论如何我都希望子标签存在。

【问题讨论】:

  • 你能举一些现实世界的例子吗? “div x 等于 0”这件事很难理解。
  • 抱歉,希望我更新的问题更有意义。

标签: html ruby-on-rails ruby ruby-on-rails-3 slim-lang


【解决方案1】:

在视图中复制代码时,您应该使用部分来保存复制的代码并将部分呈现在您希望它出现的任何位置。我知道您的简化代码只是为了表明您的意图,但如果它更真实,我可以提供更多建议。

您也可以内联该逻辑:

div
  = x == 0 ? 'Some Cool Title' : 'Some Other Title'
  div Ditto

不过,比这更好的是将该逻辑移动到更合适的地方,例如使用 Draper 之类的 gem 来创建演示者对象。

div
  = @my_presenter_object.title
  div ditto

【讨论】:

  • 我为你第一句话的答案 b/c 投了票:“当在视图中复制代码时,你应该使用部分来保存重复的代码并将部分呈现在你想要的任何地方它会出现。” 谢谢!
【解决方案2】:

三级解决方案:

  1. 模板中的 if/else 类似于您的原始代码。用例:短代码

  2. 使用助手。我喜欢这个。用例:带有明显模式的更长但不太长的代码。

    = my_helper(x)
    

    然后在助手中你可以插入x。非常强大。

  3. 使用 if/else 和 partial。正如亚历克斯已经提到的。用例:if 或 else 之后的长代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-09
    • 1970-01-01
    • 2017-10-08
    • 1970-01-01
    相关资源
    最近更新 更多