4

Hardwiredでcontent_forとyield_contentのサポートを実装する作業をしています。

Sinatra :: Contribの実装が機能しないため、より単純なバージョンを試しました。

  module ContentFor

    def content_for(key, &block)
      content_blocks[key.to_sym] << block.call
      return ""
    end

    def content_for?(key)
      content_blocks[key.to_sym].any?
    end

    def yield_content(key, *args)
      content_blocks[key.to_sym].join
    end

    private

    def content_blocks
      @content_blocks ||= Hash.new {|h,k| h[k] = [] }
    end
  end

残念ながら、これはコンテンツを繰り返します(content_forは、子コンテンツだけでなく、テンプレート内のすべてを取得するようです)。

これを実装するにはどのようなアプローチを取る必要がありますか?

4

1 に答える 1

4

Slimは、=またはを使用する場合にのみ子コンテンツをキャプチャします。。はキャプチャ==しません-

= content_for :area do代わりに使用してください- content_for :area do

content_for注:どうやらこの問題はシナトラスタイルとに固有のものyield_contentです。どうやら、より洗練されたRails実装は、これを可能にするためにバッファマジックを使用することもでき-ます。

于 2013-01-31T20:56:41.667 に答える