【问题标题】:When do you use <% -%> instead of <% %>你什么时候使用 <% -%> 而不是 <% %>
【发布时间】:2010-09-23 09:56:04
【问题描述】:

我注意到在某些 Rails 视图中使用了这个:

<% # Code... -%> 

代替:

<% # Code... %>

有什么区别?

【问题讨论】:

    标签: ruby-on-rails view-templates


    【解决方案1】:

    有点晚了,但我认为值得指出的是,您也可以这样做:

    <%- @posts.each do |post| -%>
      <li><%= post.title %></li>
    <%- end %>
    

    这会去掉前面的所有空格。

    【讨论】:

      【解决方案2】:

      ERB 中评估代码的不同选项如下(可以在 Textmate 中使用 Ctrl-Shift-. 访问它们):

      • &lt;% %&gt; 只评估内容。
      • &lt;%= %&gt;评估内容并放置结果。
      • &lt;%= -%&gt; 评估内容并打印结果。
      • &lt;%# %&gt;内容作为评论处理,不输出。

      注意puts 和print 之间的区别。 Puts 总是在字符串的末尾添加一个新行,而 print 不会。

      基本上,-%&gt; 表示不要在末尾输出新行。

      【讨论】:

        【解决方案3】:

        考虑一下

        <div>
            <% if @some_var == some_value %>
            <p>Some message</p>
            <% end %>
        </div>
        

        如果@some_var 是some_value,则上面的代码会生成下面的HTML

        <div>
        
            <p>Some message</p>
        
        </div>
        

        如果您在结束标记中添加了 -,则 ERB 解释器将删除带有代码标记的新行,包括 - 并导致以下结果

        <div>       
            <p>Some message</p>        
        </div>
        

        如果您需要一个好看的 HTML 代码,这很有用。有时你会发现它在与设计师并肩工作时很有用

        希望这会有所帮助。

        【讨论】:

          【解决方案4】:
              <ul>
              <% @posts.each do |post| -%> 
                <li><%=post.title%></li>
              <% end -%>
              </ul>
          

          &lt;ul&gt; 和第一个 &lt;li&gt; 以及最后一个结束 &lt;/li&gt; 和 &lt;/ul&gt; 之间不会有新行。如果 - 被省略,会有。

          【讨论】:

          • 是的。 禁止换行。在用纯文本(如电子邮件)处理重要的事情时,它可能非常有用。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-01-10
          • 1970-01-01
          • 2010-11-16
          • 1970-01-01
          • 2010-09-20
          • 2010-10-10
          • 1970-01-01
          相关资源
          最近更新 更多