ハンドルバー タグは、haml が html にコンパイルされた後に評価され、ハンドルバーは haml のプレーン テキストとしてカウントされるため、ロジックをインデントすることはできません。
{{#if misc}}
%b Misc Products
Total:
{{misc_total}}
{{#each misc}}
{{price_charged}}
{{notes}}
{{/each}}
{{/if}}
これは読みにくいです。これをより見栄え良くするために Rails ヘルパーを作成しました*。
def handlebars_helper(helper, &block)
raise ArgumentError, "Missing block" unless block_given?
open = ActiveSupport::SafeBuffer.new("{{##{helper}}}") # helper opening
open.safe_concat capture(&block)
open.safe_concat("{{/#{helper.split.first}}}") # helper closing
concat(open)
end
このようなhamlを書くことができます
- handlebars_helper 'if misc' do
%b Misc Products
Total:
{{misc_total}}
- handlebars_helper 'each misc' do
{{price_charged}}
{{notes}}
これは以前に行われたことがありますか、それともより良い方法がありますか?
*このヘルパーは少し乱雑に見えます。私はブロックに慣れていません。どうすればこれをクリーンアップできますか?