【问题标题】:How to create helper method HAML如何创建辅助方法 HAML
【发布时间】:2015-07-13 01:14:20
【问题描述】:

我继承了一个使用 Ruby on Rails 和 HAML 的项目,但我之前从未见过 HAML,所以我有点困惑。该项目正在使用设计来处理用户并设计发送闪存事件或在用户登录或用户登录失败以及其他类似事件时通知的东西。我的问题是 Flash 通知被硬编码为某些类型,我想通过一些自定义将它们绑定到引导警报。我知道我可以编辑设计通知的文本,但我不能更改它们的类型。我有一个包含显示警报的部分文件。

- if flash[:error]
  .alert.alert-error
    %button.close{"data-dismiss" => "alert", :type => "button"} ×
    = flash[:error].html_safe
- elsif flash[:alert]
  .alert.alert-error
    %button.close{"data-dismiss" => "alert", :type => "button"} ×
    = flash[:alert]
- elsif flash[:notice]
  .alert.alert-warning
    %button.close{"data-dismiss" => "alert", :type => "button"} ×
    = flash[:notice]
- elsif flash[:success]
  .alert.alert-success
    %button.close{"data-dismiss" => "alert", :type => "button"} ×
    = flash[:success]

我想做的是在设计字符串前面加上我希望它们成为的警报类型。

拿走这个

Successful log in!

把它变成这个

alert-info|Successful log in!

然后解析更改类型并更改字符串。我不知道这是否可以通过辅助方法实现。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 twitter-bootstrap devise haml


    【解决方案1】:

    = flash[:success] 是 ERB 的 <%= flash[:success] %> 的 HAML 等价物

    知道了这一点,您就可以使用普通的 ruby​​ 代码来编写您想要显示的内容。此外,要在 HAML 中编写简单的文本,只需将其放在单独的行上(保持适当的缩进):

    - if flash[:success]
      .alert.alert-success
        %button.close{"data-dismiss" => "alert", :type => "button"} ×
        My custom text
        = flash[:success]
    

    这将转化为:

    <% if flash[:success] %>
      <div class="alert alert-success">
        <button class="close" data-dismiss="alert" type="button">&times;</button>
        My custom text
        <%= flash[:success] %>
      </div>
    <% end %>
    

    注意我在上面的两个代码示例中放置“我的自定义文本”

    有关了解 HAML 疯狂的更多帮助,请参阅:HAML DocumentationOnline HAML Conversion Tool

    更新

    如果你想解析 flash 字符串并根据前缀显示一个 div,创建一个这样的帮助器:

    # application_helper.rb
    def display_flash(input_message)
      if input_message
        # Split the prefix from the actual message
        prefix, output_message = input_message.split('|')
    
        # Use HAML's haml_tag to create your div, button, etc.
        haml_tag(:div, class: "alert #{prefix}") do
          output_message
        end
      end
    end
    

    希望它比以前更接近解决您的问题。否则请告诉我。

    【讨论】:

    • 感谢您的回复,但也许我没有说清楚,我将更新设计使用“alert-info|”的字符串的资源文件或“警报成功|”前缀在字符串上。如果存在该前缀,我将决定在 div 上放置哪种警报类,并去掉前缀并在 div 中呈现字符串。我认为我需要创建某种辅助方法来执行此操作,而且我也无法嵌套 if 语句以使用 HAML
    • 好的,我现在明白一点了。修改设计并向字符串添加前缀几乎是多余的,因为字符串将通过特定的flash 传递,其中键是警报类型(:success:alert 等)使用的键在技术上可以是任何你想要的,所以如果你去编辑设计,你可以根据需要创建flash[:green] 闪烁。话虽如此,我将更新我的答案以帮助您从设计中解析字符串。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-17
    相关资源
    最近更新 更多