5

Rails コントローラーは頻繁に JS を返します。また、Coffeebeans を使用して js.coffee ビューを使用できるようにしています。これに関する唯一の問題は、<%= ... %>埋め込まれた Ruby の構文を使用していることです...私は理想的には、Coffeescript/HAML スタイルの文字列補間、つまり:#{..}と HAML スタイルのタグを<%= ... %>使用=したいと考えています。

この種の構文は、ファイル拡張子 js.coffee.haml で使用するのが最適だと思います。これは可能ですか?その拡張子でファイルを保存するだけでは機能しません。これを可能にするには、Coffeebeans を少し調整する必要があると思いますが、何をする必要があるかわかりません。

この投稿では、それが可能であることが示唆されました: Rails 3 でのテンプレート ハンドラーの連鎖

これをどうするかについての提案はありますか?

4

1 に答える 1

0

あなたがリンクした質問には、ポスタラスにあったブログ投稿にリンクする2番目の回答がありましたが、これは現在死んでいます...しかし、私はarchive.orgで見つけました! この投稿には、イニシャライザで必要なコードの要旨js.coffee_hamlも含まれているため、ファイルに末尾の名前を付けて処理することができます。

将来のリンク切れを防ぐために、ここに要点のコードを示しますが、私はそれを書いておらず、まだ機能するかどうかをテストしていません:

module Coffee
  module Rails
    class HamlTemplateHandler
      def self.haml_handler
        @@haml_handler ||= ActionView::Template.registered_template_handler(:haml)
      end

      def self.call(template)
        compiled_source = haml_handler.call(template)
        "CoffeeScript.compile(begin;#{compiled_source};end)"
      end
    end
  end
end

ActiveSupport.on_load(:action_view) do
  ActionView::Template.register_template_handler :coffee_haml, Coffee::Rails::HamlTemplateHandler
end

また、ブログ投稿で言及されていることは、haml はネストされたプレーン テキストを許可しないため、次のように coffeescript で何かをしたい場合:

if xyz == 1
  do_this y
  do_that x

:plainフィルターでラップする必要があります。

:plain
  if xyz == 1
    do_this y
    do_that x
于 2013-11-01T01:30:03.477 に答える