【问题标题】:Is it possible to pass a value to a YAML list?是否可以将值传递给 YAML 列表?
【发布时间】:2016-10-10 18:51:40
【问题描述】:

我正在寻找一种将值传递给可枚举列表的方法,因此我可以为

    生成一组列表项。该值应由允许它的项目显示。
    • favorites (15)           
    • 已存档
    • 已删除

    以下内容并非按原样工作,但应该有助于说明要实现的目标。

    HAML

%ul
  =list_of t('.menu', favorites_count: 15) do |item|
    #{item}

YAML

menu:
  - new
  - favorites ('%{favorites_count}')
  - archived
  - deleted

注意:最初我让我的 YAML 以字典形式在字符串中包含

  • 标签,其中一个包含计数值。但是我觉得混合 HTML 和 YAML 有点笨拙,像这样:
    menu:
      first_item: <li>new</li>
      second_item: <li>favorites %{favorites_count}</li>
      third_item: <li>archived</li>
      fourth_item: <li>deleted</li>
    

    因此寻找一个更清洁的选项,它只会在 HAML 端呈现标签,而不会在 YAML 中乱扔它们。

  • 【问题讨论】:

    • 是否有理由不这样做,比如说,部分?把它放在 YAML 中你有什么收获?
    • 部分,我觉得有点矫枉过正。
    • @Jordan 我还有多个其他“菜单”列表要加载,每个菜单的项目数量可变,而且名称总是不同,所以我也需要为每个菜单创建键。

    标签: ruby list yaml haml enumerable


    【解决方案1】:

    I18n.t 使用与sprintf 非常相似的插值语法,您可以利用它来发挥自己的优势:

    %ul
      = list_of t(".item") do |item|
        = sprintf(item, favorites_count: 15)
    

    我不完全确定这是正确的 Haml 语法,但你明白了。

    【讨论】:

    • 好东西,设法缩短了一点:= "#{item}" % { favorites_count: 15 }
    • 不要做"#{item}"#{...} 用于字符串插值,但您没有在这里插值任何东西。如果您知道item 是一个字符串,只需使用item。如果您不确定它是一个字符串,请使用item.to_s。换句话说,执行= item % ...= item.to_s % ..."#{...}" 总是没必要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-30
    • 2021-05-08
    • 2021-12-30
    • 2021-12-05
    • 2018-04-17
    • 2019-04-21
    相关资源
    最近更新 更多