代码之家  ›  专栏  ›  技术社区  ›  Garfield

Rails:条件满足时FACEBOX链接

  •  2
  • Garfield  · 技术社区  · 14 年前

    我想在满足特定条件时单击某个元素时显示一个facebox链接。 I do not want the user to click if the condition is not satisfied. 我这样做是为了实现它是相当丑陋的

    <% if x == 5 %>
        <a id="something" href="http://www.some_weird_link.com" rel="facebox">
    <% end %>
    <div>
        <!-- Loads of HTML and erb code here which should be shown no matter what condition -->
    </div>
    
    <% if x == 5 %>
        </a>
    <% end %>
    

    注意,我必须将IF条件设置为 </a> does not come in my HTML when the condition is not satisfied. 这看起来很糟糕。 你能给我推荐一个更好的方法吗?

    link_to_if 很有希望,但它希望我将链接显示文本放入参数中,这恰好是一个大参数 <div> 以我为例。

    3 回复  |  直到 7 年前
        1
  •  4
  •   Joshua Cheek    14 年前

    我尝试了几个不同的情况,这是有效的(如果您通过选项,将不会链接:如果=>false,将创建链接如果您通过:如果=>true,或如果您根本不通过if选项)

    定义助手:

      def facebox( *args , &block )
        if !args.last.is_a?(Hash) || args.last.fetch(:if,true)
          link_to *args , &block
        else
          block.call
        end
      end
    

    一旦你有了这个助手,任何时候你想要使用你的facebox链接方法(你也可以用所有特殊的facebox参数充实它——比如rel,可能被移动到助手中来清理你的视图)。

    然后你可以这样做:

      <% facebox 'http://www.some_weird_link.com' , :id => 'something' , :rel => 'facebox' , :if => (x == 5) do %>
        <div>
          <!-- Loads of HTML and erb code here which should be shown no matter what condition -->
        </div>
      <% end %>
    
        2
  •  1
  •   Salil    14 年前

    尝试

    <%= "<a id='something' href='http://www.some_weird_link.com' rel='facebox'>" if x == 5 %>
    <div>
        <!-- Loads of HTML and erb code here which should be shown no matter what condition -->
    </div>
    
    
    <%= " </a> " if x == 5 %>
    
        3
  •  0
  •   halfer Rajnish Kumar    7 年前

    如果我正确地理解了你的问题,这应该是个窍门:

    <%= ((x == 5) ? (link_to 'facebook', 'http://www.some_weird_link.com', :id => 'abc', :rel => 'facebox') : '') %>
    
    <div>
        <!-- Loads of HTML and erb code here which should be shown no matter what condition -->
    </div>