1

是否可以在 Ruby 中替换 yield 块中的字符串?例如,如果有人有

drop_down "Dropdown" do
    menu_item "Home", "/"
    drop_down "Inner" do
        menu_item "Inner Home", "/inner"
    end
end

我想将drop_downotherdrop_down块内的调用更改为调用,sub_drop_down或者至少做一些特殊的事情来让它知道它在另一个drop_down块内。这意味着将drop_down块中的字符串替换为sub_drop_down.

上面的代码示例将生成

<li class="dropdown">
  <a href="#" class="dropdown-toggle" data-toggle="dropdown">
    Dropdown
    <b class="caret"></b>
  </a>
  <ul class="dropdown-menu">
    <li class="active">
      <a href="/">Home</a>
    </li>
    <li class="dropdown">
      <a href="#" class="dropdown-toggle" data-toggle="dropdown">
        Inner
        <b class="caret"></b>
      </a>
      <ul class="dropdown-menu">
        <li>
          <a href="/inner">Inner Home</a>
        </li>
      </ul>
    </li>
  </ul>
</li>

但是我希望第二个<li class="dropdown">成为<li class="dropdown-submenu">我可以通过将drop_down另一个内的调用更改为成为sub_drop_down可能导致classforli成为的调用来提供"dropdown-submenu"。有什么想法可以改变那个电话吗?

我目前的sub_drop_down方法是

def sub_drop_down(name)
    content_tag :li, :class => "dropdown-submenu" do
        drop_down_link(name) + drop_down_list {yield}
    end
end

一旦我添加了我的 sub_drop_down 方法,下面的代码就会起作用

drop_down "Dropdown" do
    menu_item "Home", "/"
    sub_drop_down "Inner" do
        menu_item "Inner Home", "/inner"
    end
end

但我不想强迫用户输入sub_drop_down而不是drop_down. 我想sub_drop_down被称为而不是drop_down

我正在尝试在这个项目中添加一个新功能。该drop_down方法的源代码在此处的第 28-32 行,但我不确定如何将content_tag :class变量添加为dropdown-submenunot just dropdown。这个问题是我关于如何做到这一点的第一个想法,如果不可能,我会喜欢使用不同方法的解决方案。

4

0 回答 0