18

リファクタリング中に、HAMLテンプレートの一部をコピーしてヘルパーのコードに貼り付けるだけで非常に便利です。現在、そのような場合1)ビューのその部分を最初から書き直す必要があります2)content_tagやhaml_tagのような冗長な構文を使用する必要があります。

ヘルパーとして機能するHAMLsystaxを使用してパーシャルを定義することが可能であることを私は知っています。1)私にとっては、小さな小さな関数ごとに個別のファイルを作成するのは不便ですが、2)部分的な呼び出し構文は非常に冗長です。

理想的には、*_helperクラスを次のようにしたいと思います。

- def some_helper(*its_args)
  .some_class
    = some_ruby_expression
  %some_tag#some_id
    - another_expression do
      etc

または少なくともこのように:

define_haml_helper :some_helper, [:arg1, :arg2], %{
  .some_class
    = some_ruby_expression
  %some_tag#some_id
    - another_expression do
      etc
}

私の問題を解決するプラグインはありますか?

あるいは、HA​​MLスニペットを再利用可能な要素(ヘルパー/関数/部分/ビルダーなど)にリファクタリングする方法を説明できますか?

4

4 に答える 4

13

参考から:

def render_haml(code)
    engine = Haml::Engine.new(code)
    engine.render
end

これにより、新しいHamlエンジンが開始され、レンダリングされます。

于 2011-03-09T12:41:09.483 に答える
4

再利用可能な小さなスニペットのメソッドだけが必要な場合は、ローカル変数を使用したパーシャルはどうでしょうか。http://guides.rubyonrails.org/layouts_and_rendering.html#using-partials

于 2011-03-30T21:18:30.340 に答える
4

Hamlには、capture_hamlこれを実現するために使用できるメソッドがあります。

  def some_helper
    capture_haml do
      .some_class
        = yield
      #some-code-after
    end
  end

some_helper do
  %h1 Hello World
end
=> <div class="some_class">
     <h1>Hello World</h1>
   </div>
   <div id="some-code-after"></div>

詳細については、次のリンクを参照してください:http capture_haml: //haml.info/docs/yardoc/Haml/Helpers.html#capture_haml-instance_method

于 2013-10-10T19:45:31.887 に答える
0

私はそのような目的でヒアドキュメントを使用しました:

  def view_helper
    Haml::Engine.new(<<~HAML).render
      .example
        #id ID
        .desc Description
    HAML
  end

この方法には変数のスコープに関する多くの問題があるため、前述のように、これにパーシャルを使用するのがはるかに正しい方法です。

UPD1:スコープの問題を解決する方法に関する解決策は次のとおりです。

  def view_helper
    Haml::Engine.new(<<~HAML).render(self)
      .form
        = form_tag root_path do
          = submit_tag :submit
    HAML
  end

UPD2:さらに優れたソリューション(インターネット上に設立):

def render_haml(haml, locals = {})
  Haml::Engine.new(haml.strip_heredoc, format: :html5).render(self, locals)
end

def greeting
  render_haml <<-HAML
    .greeting
      Welcome to
      %span.greeting--location
        = Rails.env
  HAML
end
于 2019-09-18T09:49:27.433 に答える